如何在Android中从列表视图中删除多个项目时更新SparseBooleanArray键值
我有一个带有ArrayAdapter的ListView 我选择了多个项目,并尝试从数据库和ListView中删除它们 我已将“删除”置于操作模式上下文菜单中,并按如下方式删除:如何在Android中从列表视图中删除多个项目时更新SparseBooleanArray键值,android,listview,Android,Listview,我有一个带有ArrayAdapter的ListView 我选择了多个项目,并尝试从数据库和ListView中删除它们 我已将“删除”置于操作模式上下文菜单中,并按如下方式删除: if(item.getItemId() == R.id.action_delete) { SparseBooleanArray selected = adapter.getSelectedIds(); short size = (short)selected.size(); fo
if(item.getItemId() == R.id.action_delete)
{
SparseBooleanArray selected = adapter.getSelectedIds();
short size = (short)selected.size();
for (byte I = 0; I<size; I++)
{
if (selected.valueAt(I))
{
Contact selectedItem = adapter.getItem(selected.keyAt(I));
boolean number = mHelper.deleteCont(myList.get(selected.keyAt(I)).getId());
adapter.remove(selectedItem);
adapter.notifyDataSetChanged();
}
}
// Close CAB (Contextual Action Bar)
mode.finish();
}
稀疏布尔数组不同于常规布尔数组(
boolean[]
),它意味着在整数索引不一定一致时使用,例如在数字ID的情况下
您应该为SparseBooleanArray
中的每个项目使用数字ID,而不仅仅是项目的索引。只需删除从SparseBooleanArray
中删除的ID,而不用担心索引,就可以解决问题
只需确保每个元素都有一个唯一的整数ID,然后在将其添加到
SparseBooleanArray
时使用该ID即可 使用真实的ID。。。not POSITION YES ok,但在尝试为一个选定项仅传递一个唯一整数而不为多个项传递ID时,我成功传递了所有选定值,但请联系selectedItem=adapter.getItem(selected.keyAt(I));无法工作,因为它需要位置来获取特定项,我是否应该将唯一id与位置连接起来?您应该有一个按id获取位置的方法-基本上,它遍历项列表,比较id,然后返回列表中与给定id匹配的项的索引。
public void toggleSelection(int position) {
selectView(position, !mSelectedItemsIds.get(position));
}
public void selectView(int position, boolean value) {
if (value)
mSelectedItemsIds.put(position, value);
else
mSelectedItemsIds.delete(position);
notifyDataSetChanged();
}
public SparseBooleanArray getSelectedIds() {
return mSelectedItemsIds;
}