如何在刷新适配器后将recyclerView位置项视图重置为原始状态

4

我有一个包含视图的RecyclerView,当点击某个视图时,该行的视图将被禁用。

问题是在我像这样更新适配器后:

    adapterData.clear();
    adapterData.addAll(refreshedAdapterData);
    notifyDataSetChanged();

在刷新数据之后,尽管数据已经更新,但前一个回收器位置的禁用视图仍然保持禁用状态。我该如何在刷新适配器数据后将视图重置为原始状态。


这些视图模型与回收视图有什么关系? - Remario
请在此处发布适当的代码 - Quick learner
4个回答

6
请使用以下代码。
  adapterData.clear();
adapterData.addAll(refreshedAdapterData);

adapter.notifyDataSetChanged();

或者

recyclerView.invalidate();

1
谢谢,我通过使用 adapterData.notifyDataSetChanged(); 解决了我的问题。 - aanshu
1
@Kunal,你能否在这里发布你的解决方案? - Hitesh Gupta

2

当你调用notifyDataSetChanged()方法时,每个视图的onBindViewHolder()方法将被调用。因此,你可以在你的Adapter方法的onBindViewHolder()中添加以下内容:

@Override   
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) {
            if (refreshedAdapterData.get(position).isInDefaultState()) {
                //set Default View Values
            } else {
                //the code you already have
            }

        }

我已经根据您的评论解决了这个问题。谢谢。 - S bruce
@Sbruce 如果这个答案帮助您解决了问题,将其标记为答案也是公平的 :) - Christoph Mayr

1

我通过在onBindViewHolder方法中放置一个条件语句来解决了这个问题,如果数据满足刷新数据的要求,则指示所有位置重置禁用视图。

@Christoph Mayr,感谢您的评论。它帮助我找到了正确的方向。


0

我清除了数据然后通知了更改,但选择的复选框没有重置,而只是上移了一个位置。假设我选择了项目#1,移出RecyclerView,再返回它将自动选择项目#0。

所以,在onResume()中我创建了新的适配器,这对我有用,但我不知道这是否是处理此情况的正确方法。

    @Override
    public void onResume() {
        super.onResume();
        if(selectedItems != null && selectedItems.size() > 0){
            selectedItems.clear(); // if no selected items before then no need to reset anything
            if(adapter != null && recyclerView != null){
                // to remove the checked box
                adapter = null;
                adapter = new MyAdapter(items, new MyAdapter.MyAdapterListener() {
                    @Override
                    public void onSelected(int pos) {
                        selectedItems.add(items.get(pos));
                    }

                    @Override
                    public void onUnSelected(int pos) {
                        selectedItems.remove(items.get(pos));
                    }
                });
                recyclerView.setAdapter(adapter);

            }

        }
    }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接