我有一个我在Fragment
中使用的数组字符串,我在列表中显示了带有setListAdapter
的数组字符串项:
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String[] array = getResources().getStringArray(R.array.examlearray);
final ArrayList<String> str = new ArrayList<String>(Arrays.asList(array));
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, str );
setListAdapter(arrayAdapter);
final ListView listView = getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {...
并在我的onActionItemClicked
下我想实现我的 deleteSelectedItem()方法,删除所选列表项,这是我的代码,但它没有删除所选项,它是只需从列表的第一个删除,当我选择所有项目并按删除,应用程序崩溃!应该怎么做?,任何帮助将不胜感激!谢谢!
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// Respond to clicks on the actions in the CAB
switch (item.getItemId()) {
case R.id.delete:
// deleteSelectedItems();
Log.i(TAG, "deleteSelectedEntries");
SparseBooleanArray checkedItems = listView.getCheckedItemPositions();
for(int i=0;i<checkedItems.size();++i)
{ if(checkedItems.valueAt(i))
str.remove(i);
}
arrayAdapter.notifyDataSetChanged();
答案 0 :(得分:1)
您不必遍历从listView.getCheckedItemPositions()获得的SparseBooleanArray,而是必须循环遍历ArrayAdapter的项目,然后检查SparseBooleanArray是否为此项目返回true。这是因为当您从ArrayAdapter中删除项目时,listView.getCheckedItemPositions()仍然会返回不再存在的项目。
所以在你的情况下:
SparseBooleanArray checkedItems = listView.getCheckedItemPositions();
// Loop backwards, so you can remove the items from within the loop
for (int i = arrayAdapter.getCount() - 1; i >= 0; i--) {
if (checkedItems.get(i)) {
// This item is checked and can be removed
arrayAdapter.remove(arrayAdapter.getItem(i));
}
}
您的应用崩溃的原因是您尝试删除不存在的项目。
答案 1 :(得分:0)
您需要保留对阵列适配器的引用。然后尝试调用适配器上的remove
函数,然后调用notifyDataSetChanged
。如果您只提及该职位,则还需要使用getItem
。
答案 2 :(得分:0)
保留用于创建适配器的适配器和数据列表的引用,最好使用ArrayList,因为它可以灵活地轻松删除元素。要设置适配器,您可以使用以下代码 -
String[] array = getResources().getStringArray(R.array.examlearray);
ArrayList<String> str = new ArrayList<String>(Arrays.asList(array));
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, str );
menuListView.setAdapter(arrayAdapter);
要删除元素,首先从数据列表中删除元素,然后调用notifyDatasetChnaged也将更新listView。您可以在onActionItemClicked
`for(int i=0;i<checkedItems.size();++i)
{ if(checkedItems.valueAt(i))
str.remove(i);
}
arrayAdapter.notifyDataSetChanged();