回收商视图中的第一个列表消失了

时间:2019-03-17 20:28:22

标签: java android android-recyclerview

我有一个RecyclerView,根据我在Spinner中选择的选项,它显示不同的列表。我可以动态地将项目添加到列表中,但是当我将项目添加到Spinner的顶部选项时,每次添加时都会出现两个项目,仅应添加一个项目,并且在其中选择其他选项时Spinner,然后回到顶部选项,应该包含在其中的所有项目都消失了。但是,当我在另一个选项中重复相同的操作时,一次添加一个项目,并且如果我切换到另一个项目又返回时它们仍然存在,因此只有在遇到这些问题的第一个选项中,它才存在。

以下是显示所发生情况的图片。第一张图片显示了整个Spinner,第二张是选择了顶部选项并添加了项目的图片,第三张是选择了第二个Spinner选项,第四张是返回了顶部的选项,现在所有项目都消失了。

Babou Babou Babou Babou

此方法用于将项目添加到列表之一。 Spinner中的每个选项用于获取listOfLists中的元素,其中每个元素都是ArrayList<Item>()mItemListRecyclerView打印出来的列表。

  public void addItem(){
        mItemList.add(0, new Item(idText.getText().toString(), addAmountField.getText().toString()));
        listOfLists.get(dropdown.getSelectedItemPosition()).add(0, new Item(idText.getText().toString(), addAmountField.getText().toString()));
        System.out.println("ListSize: " + listOfLists.get(dropdown.getSelectedItemPosition()).size());

        addAmountField.setVisibility(View.GONE);
        btnAdd.setVisibility(View.GONE);
        mAdapter.notifyDataSetChanged();
        saveData2();
    }

当我从Spinner中选择另一个选项时,这是用于切换列表的代码。我在这里所做的是先清除mItemList,然后在ArrayList<Item>内部填充listOfLists之一。

 dropdown.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                mItemList.clear();

                for (int i = 0; i < listOfLists.get(position).size(); i++) {
                    mItemList.add(listOfLists.get(position).get(i));
                }


                mAdapter.notifyDataSetChanged();

            }

            @Override
            public void onNothingSelected(AdapterView<?> parentView) {
                // your code here
            }

        });

如何解决此问题,以使Spinner的顶部选项与其他选项一样工作,即它一次添加一个项目,而在我切换到另一个选项后仍然具有这些项目?

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题,所以对于任何面临类似问题的人来说,这就是问题所在:

与listOfLists中的其他列表不同,我将mItemList设置为这样的选定列表

 mItemList.clear();

 for (int i = 0; i < listOfLists.get(position).size(); i++) {
      mItemList.add(listOfLists.get(position).get(i));
 }

当我像这样运行应用程序时,mItemList始终设置为第一个列表

mItemList = listOfLists.get(dropDown.getSelectedItemPosition());

所以我刚刚对其进行了更改,因此它以与其他列表相同的方式设置了mItemList,现在它可以正常工作了。