是否可以在对话框片段中找到的listview中使用simple_list_item_multiple_choice?

时间:2014-11-20 06:55:13

标签: android listview android-fragments android-listview

我有一个具有Listview的DialogFragment类。我想要的是Listview有复选框,所以将Listview 设置为simple_list_item_multiple_choice 然而我得到一个空指针异常错误evrytime我点击元素,这里是我的代码到目前为止..

public static class MyDialogFragment extends DialogFragment implements
OnItemClickListener {
    SharedPreferences dataattribute_pref;
    ArrayList<String> lstview_list = new ArrayList<String>();
    ArrayList<String> checkedAttrib;
    ArrayAdapter<String> lstview_adapter;
    ListView attributelist;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            dataattribute_pref = this.getActivity().getSharedPreferences("MyPrefonDataAttribute", Activity.MODE_PRIVATE);
            View rootView = inflater.inflate(R.layout.fragment_dataatribute, null, false);
            attributelist = (ListView) rootView.findViewById(R.id.lstview_AttributeList);
            Map<String,?> prefelement = dataattribute_pref.getAll();
            for(Map.Entry<String, ?> entry : prefelement.entrySet()){
                lstview_list.add(entry.getValue().toString());
            }

            /////////// .....


            getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
            return rootView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

         lstview_adapter = new ArrayAdapter<String>(getActivity(),
         android.R.layout.simple_list_item_multiple_choice, lstview_list);
         attributelist.setAdapter(lstview_adapter);
         attributelist.setOnItemClickListener(this);


     }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        // TODO Auto-generated method stub
        SparseBooleanArray checked=attributelist.getCheckedItemPositions();
        if(!checked.get(position)){
            checkedAttrib.remove(lstview_list.get(position));
        }
        else{
            checkedAttrib.add(lstview_list.get(position));
        }

    }

}

以及界面如何看起来像enter image description here

它的作用是从用户那里获取输入并在列表中动态添加用户输入..每当用户想要从列表中删除某些内容时,他/她就可以检查这些项目并单击垃圾桶按钮..我使用了对话框片段,因为我发现它被另一个片段调用时很容易使用..

请有人帮忙..请...非常感谢你..

1 个答案:

答案 0 :(得分:0)

尝试在项目点击监听器中使用isItemChecked(position):

 @Override
 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    if(!attributelist.isItemChecked(position)){
       checkedAttrib.remove(lstview_list.get(position));
    }else{
       checkedAttrib.add(lstview_list.get(position));
    }
 }