【问题标题】:How to keep new data in recycleView.setAdapter如何在 recyclerView.setAdapter 中保留新数据
【发布时间】:2018-02-27 01:43:49
【问题描述】:

在 TabHost 中,我有 2 个选项卡(2 个片段)。在 tab1 的 onCreateView 中,我有 recycleView.setAdapter。当我单击时,它会加载新数据,然后如果从 tab1 切换到 tab2 然后返回到 tab1,recycleView.setAdapter 会重新加载旧数据。
从 tab2 切换到 tab1 时,如何在 recycleView 中保留新数据?

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_position, container, false);

    recyclerViewPosition = view.findViewById(R.id.recyclview);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
    recyclerViewPosition.setLayoutManager(linearLayoutManager);
    recyclerViewPosition.setHasFixedSize(true);
    recyclerViewPosition.setAdapter(positionAdapter);

    // searchView
    searchView = view.findViewById(R.id.sview);
    searchView.setOnQueryTextListener(new OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            final List<DataPosition> filteredModelList = filter(mPositionList, newText);
            positionAdapter.setFilter(filteredModelList);
            return true;
        }
    });

    Call<Position> call = mApiService.getPositionList(strTokent);
    call.enqueue(new Callback<Position>() {
        @Override
        public void onResponse(Call<Position> call, Response<Position> response) {
            if (response.isSuccessful()) {

                itemArrayList = response.body().getData().getItems();

                mPositionList.clear();
                dataPosition.clear();

                /* put id and name to hashMap*/
                for (int i = 0; i < itemArrayList.size(); i++) {
                    hashMap.put(itemArrayList.get(i).getName(), itemArrayList.get(i).getId());
                }

                for (int j = 0; j < itemArrayList.size(); j++) {
                    dataPosition.add(itemArrayList.get(j).getName());
                }

                for (String strPosition : dataPosition) {

                    mPositionList.add(new DataPosition(strPosition));
                }
            }
        }

        @Override
        public void onFailure(Call<Position> call, Throwable t) {

        }
    });

    return view;
} 

【问题讨论】:

  • 你试过 mAdapter.notifyDataSetChanged() 吗?
  • 请把tab1中的一些代码放在CreateView上。
  • Faysal Ahmed - 我在 oncreateview() 方法中添加了所有代码
  • 永远不要重新分配列表...itemArrayList = response.body().getData().getItems()...您应该始终使用itemArrayList.addAll(...)
  • cricket_007 - 但是当我返回 tab1 recycleview.setadater 时仍然加载旧数据

标签: android android-recyclerview android-tabhost


【解决方案1】:

清除此数组列表:

@Override
public void onResponse(Call<Position> call, Response<Position> response) {
    itemArrayList.clear();
    if (response.isSuccessful()) {

        itemArrayList = response.body().getData().getItems();

        mPositionList.clear();
        dataPosition.clear();
    }
}

【讨论】:

  • 我添加了 itemArrayList.clear();但它不起作用适配器仍然加载旧数据
  • mPositionList.clear();数据位置.clear();评论他们
  • 如果我不使用它们,recycleview 每次返回 tab1 时添加旧数据
  • id 635 543 027 通过 2b2q2i
  • 无法连接
猜你喜欢
  • 2019-03-18
  • 2017-10-03
  • 2018-08-15
  • 2020-06-20
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 2018-09-22
  • 2015-05-06
相关资源
最近更新 更多