我有一个具有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));
}
}
}
以及界面如何看起来像
它的作用是从用户那里获取输入并在列表中动态添加用户输入..每当用户想要从列表中删除某些内容时,他/她就可以检查这些项目并单击垃圾桶按钮..我使用了对话框片段,因为我发现它被另一个片段调用时很容易使用..
请有人帮忙..请...非常感谢你..
答案 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));
}
}