我正在使用包含多个选项的对话框。用户点击某个项目后,itemsList
中的项目会被添加到selectedItemsList
,当然,当用户取消选择某个项目时,该项目将从selectedItemsList
中删除
使用{{3}}测试我的应用时。我收到了这些错误:
java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3
...
java.lang.IndexOutOfBoundsException: Invalid index 4, size is 3
摘录:
List<Item> itemsList; // this list is populated before accessing
List<SelectedItem> selectedItemsList;
...
dialogBuilder.setMultiChoiceItems(playlists, null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
selectedItemsList.add(new SelectedItem(itemsList.get(which).getId()));
} else if (selectedItemsList.get(which) != null) {
selectedItemsList.remove(which);
}
}
});
我可以解决&#39;检查which
是否小于selectedItemsList.size()
。但据我所知,如果这返回错误;该项目不会从selectedItemsList
中删除,但该复选框将取消选中。这导致一切都会混淆
答案 0 :(得分:2)
您可以从中选择的列表大小与您要删除的列表的大小相同,因此不是
selectedItemsList.remove(which);
你需要
selectedItemsList.remove(selectedItemsList.getItemWithId(itemsList.get(which).getID())
或类似的东西
虽然getItemWithId
不存在。我不确定itemsList.getItem
是什么意思,我假设你的selectedItemList
和itemList
都有不同的类型。如果他们保持相同的类型,你可以
selectedItemsList.remove(itemsList.get(which))
如果这没有意义,请发布您的SelectedItem类以及创建两个列表的位置,并且我将能够进一步提供帮助。
答案 1 :(得分:0)
我必须覆盖public static void main(String[] args)
类
equals()
方法
更新了代码段
SelectedItem
<强> SelectedItem.class 强>
List<Item> itemsList; // this list is populated before accessing
List<SelectedItem> selectedItemsList;
...
dialogBuilder.setMultiChoiceItems(playlists, null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
selectedItemsList.add(itemsList.get(which).getSelectedItem());
} else if (selectedItemsList.get(which) != null) {
selectedPlaylists.remove(itemsList.get(which).getSelectedItem());
}
}
});
<强> Item.class 强>
...
@Override
public boolean equals(Object o) {
return (this.id.equals(((SelectedItem) o).getId()));
}
注意:我遗漏了一些代码。