为什么我的ArrayList在添加到Android中的另一个ArrayList时会复制我的项目?

时间:2016-06-04 07:42:38

标签: java android arraylist

我有一个可检查的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仅显示每个所选项目的单个条目,而不是多个项目。

1 个答案:

答案 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));