如何在Android中从列表视图中删除多个项目时更新SparseBooleanArray键值

如何在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

我有一个带有ArrayAdapter的ListView

我选择了多个项目,并尝试从数据库和ListView中删除它们

我已将“删除”置于操作模式上下文菜单中,并按如下方式删除:

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;
}