这让我疯了。我有一个ListView
和一个ArrayList
作为我的适配器。 ListView
模式为CHOICE_MODE_MULTIPLE
,布局为simple_list_item_checked
。我现在可以在ListView
中选择多个项目。
我的情况:
int length = jsonList.size();
SparseBooleanArray checked = lv_Devices.getCheckedItemPositions();
for (int i = 0; i <length ; i++ ){
if (checked.get(i)) {
onList.add(jsonList.get(i));
jsonList.remove(i);
lv_Devices.setItemChecked(i, false);
length--;
}
}
adapter.notifyDataSetChanged();
adapterOn.notifyDataSetChanged();
这是LogCat:
size of array 8 : contains [1, 2, 3, 4, 5, 6, 7, 8]
you removed index 0
[2, 3, 4, 5, 6, 7, 8]
you removed index 1
[2, 4, 5, 6, 7, 8]
you removed index 2
[2, 4, 6, 7, 8]
you removed index 3
[2, 4, 6, 8]
从最终结果可以看出,数组正在转移索引。我想要实现的目标:获取每个选定的项目,并将其添加到其他ListView
,同时从当前ListView
中删除。
LogCat显示选择所有项目时会发生什么。点击按钮也会发生这种情况。对此的任何建议都是完美的。这也是我第一次使用stackoverflow。我并没有真正使用它,因为这里已经讨论了大多数编程错误。我在这个问题上遇到了困难。
答案 0 :(得分:1)
尝试这样的事情:
int item = 0;
for (int i = 0; i < length; i++) {
if (checked.get(i)) {
onList.add(jsonList.get(item));
jsonList.remove(item);
lv_Devices.setItemChecked(i, false);
}
else {
item++;
}
}
它将尝试删除数组中的第一项(项目0)。如果选中该项,则会将其删除。这意味着之前项目1的项目现在是项目0,因此它将再次检查项目0。
但是,如果没有选中第0项,它将继续执行第1项,并继续做同样的事情。