如何删除多选列表视图中的已检查项目以及要删除的上下文操作 -
ArrayList<String> liveNames = new ArrayList<String>() {
{
add("dani");
add("john");
add("dave");
add("alen");
add("deno");
add("feliks");
add("jupi");
}
};
adapter = new ArrayAdapter(这个, android.R.layout.simple_list_item_multiple_choice,liveNames);
setListAdapter(adapter);
.......
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
lv = getListView();
// Respond to clicks on the actions in the CAB
switch (item.getItemId()) {
case R.id.item1:
if(lv.getCheckedItemCount() > 0){
removeItems = lv.getCheckedItemIds();
deleteSelectedItems(removeItems);
}
mode.finish(); // Action picked, so close the CAB
return true;
default:
return false;
}
}
现在我应该如何在deleteSelectedItems(long [] delItms)方法中实现它,以便在“names”ArrayList中删除ListView中的选定项ID。请提供一些提示
我知道我可以用
更新适配器列表adapter.notifyDataSetChanged();
但是如何使用他们的ID获取列表视图中项目的位置,以便我可以
name.remove(position) - but I have only the IDs.
谢谢
答案 0 :(得分:3)
这个方法应该为你做的,我想:
/* returns item's position in ArrayList by ID */
public int getItemPositionById(int id)
{
for(int i = 0; i < names.size(); i++) {
if(names.get(i).getId() == id) {
return i; // if found item with specified id, return it's position
}
}
return -1; // didn't find item with specified id
}
只需为你拥有的所有ID调用它并将这些位置存储在某处。然后,您可以删除这些位置的所有项目。
答案 1 :(得分:1)
无论如何,我无法使用此方法检索已检查的ID
removeItems = lv.getCheckedItemIds();
因为适配器需要有稳定的ID ...或类似的东西
所以我尝试用
检索已检查项目的位置SparseBooleanArray checkedItemPositions = getListView().getCheckedItemPositions();
然后删除它们并更新arraylist和适配器
public void removeSelectedItems(){
int count = lv.getCount();
SparseBooleanArray checkedItemPositions = getListView().getCheckedItemPositions();
for (int i=0;i<count;i++){
if(checkedItemPositions.get(i))
Log.e("TEST", liveNames.get(i));
liveNames.remove(i);
}
adapter.notifyDataSetChanged();
}
问题是我想使用liveNames ArrayList,每次删除一个元素时动态更改其元素索引,以便最终结果出错。
以下是此类问题的讨论链接,但没有解决方案 - How to get Selected items from Multi Select List View
我如何解决问题:
将其添加到我的listadapter中 - 这是方法
public void removeSelectedItems(){
updatedList = new ArrayList<String>(); //initialize the second ArrayList
int count = lv.getCount(); //number of my ListView items
SparseBooleanArray checkedItemPositions = getListView().getCheckedItemPositions();
for (int i=0;i < count;i++){
if(!checkedItemPositions.get(i))
updatedList.add(liveNames.get(i));
Log.e("TEST", liveNames.get(i));
}
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice, updatedList);
setListAdapter(adapter);}
希望它会有所帮助:)