我有一个可检查的RelativeLayout,我已从this教程中获得。一切都完全相同,只是当用户进入"向导"的下一步时,我将数据从一个ArrayList添加到另一个。我正在使用this库。
出于某种原因,当用户进入向导的最后一步时,所选项目会被多次复制。例如,如果用户选择:
选择1,选择5,选择7
"向导中的最后一步"显示这个:
选择1 选择1 选择5 选择7 选择1 选择5 选择7 选择1 选择5 选择7
这是从"选择"添加所选项目的代码。 ArrayList到最终结果ArrayList。 (我有两个数组,因为另一个数组从不同类型的ArrayList的另一个选择屏幕收集项目):
final SparseBooleanArray checkedItems = myListView.getCheckedItemPositions();
int checkedItemsCount = checkedItems.size();
for (int i = 0; i < checkedItemsCount; ++i) {
// Item position in adapter
int position = checkedItems.keyAt(i);
// Add team if item is checked == TRUE!
if(checkedItems.valueAt(i))
selectedTeams.add(myAdapter.getItem(position));
for (int j = 0; j < selectedTeams.size(); j++) {
selectedTeams.get(i);
System.out.print("option list size");
System.out.print(selectedTeams.size());
CreateProduct.nsList.add(selectedTeams.get(j).getBaseName());
}
}
if(selectedTeams.size() < 2)
Toast.makeText(getContext(), "Need to select two or more items.", Toast.LENGTH_SHORT).show();
else
{
// Just logging the output.
for(NSBaseModel t : selectedTeams)
Log.d("SELECTED TEAMS: ", t.getBaseName());
}
从一步到下一步的logcat仅显示每个所选项目的单个条目,而不是多个项目。
答案 0 :(得分:1)
我认为这是“检查”项目。您可以稍后移动以确保只发生一次,即在向导“下一步”。
或者您可以在for循环之前清除项目。如果没有这个,就不会从列表中删除任何内容,每个tick都会多次添加每个项目。
selectedTeams.clear();
for (int i = 0; i < checkedItemsCount; ++i) {
// Item position in adapter
int position = checkedItems.keyAt(i);
// Add team if item is checked == TRUE!
if(checkedItems.valueAt(i))
selectedTeams.add(myAdapter.getItem(position));