当前位置: 首页 > 知识库问答 >
问题:

RecyclerView适配器notifyDataSetChanged不起作用

司马狐若
2023-03-14

我延长了

RecyclerView.Adapter<RecyclerView.ViewHolder>

当我打电话的时候:

mRecyclerView.getAdapter().notifyDataSetChanged();

什么也没发生。

刷新视图的唯一方法是再次设置适配器(请参见此答案):

mRecyclerView.setAdapter(new MyAdapter(...));

我对此解决方案有两个问题:

  1. 当我再次设置适配器时,我可以看到屏幕上有一个闪烁
  2. listview返回第一个位置。

有什么想法吗?

共有3个答案

常永怡
2023-03-14

根据javadocs:如果您正在编写一个适配器,如果可以的话,使用更具体的更改事件总是会更有效。依靠notifyDataSetChanged()作为最后手段。

public class NewsAdapter extends RecyclerView.Adapter<...> {    

private static List mFeedsList;
...

    public void swap(List list){
    if (mFeedsList != null) {
        mFeedsList.clear();
        mFeedsList.addAll(list);
    }
    else {
        mFeedsList = list;
    }
    notifyDataSetChanged();
}

我正在使用改装来获取列表,在改装的onResponse()使用中,

adapter.swap(feedList);
汪文光
2023-03-14

如果您的< code>getItemCount()返回0,那么< code > notifyDataSetChanged()将不会执行任何操作。确保在初始化适配器时,传递的是有效的数据集。

东门楚
2023-03-14

如果< code > notifyDataSetChanged()没有触发视图更新,那么您可能忘记了在RecyclerView上调用< code>SetLayoutManager()(就像我一样!).只是不要忘记这样做:Java代码:

LinearLayoutManager layoutManager = new LinearLayoutManager(context ,LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager)

C#代码,我用的是Xamarin。

var layoutManager = new LinearLayoutManager(Context, LinearLayoutManager.Vertical, false);
recyclerView.SetLayoutManager(layoutManager);

在调用recyclerView.SetAdapter(适配器)之前;

如果您更喜欢用 xml 声明它,这样您就不会在代码中忘记它,您也可以将这些行添加到回收器的 xml 中查看:

app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:orientation="vertical"
 类似资料:
  • 我正在从Firebase数据库获取一些数据,并试图用它填充适配器。在适配器的被调用后,屏幕闪烁,什么也没发生,我甚至无法在onBindViewHolder中捕捉到断点。 这是我的代码: POJO类: } 这是我的活动布局,称为“活动结果”。包含RecyclerView的xml 这是我的Adapters ViewHolder布局,名为score_view_holder。xml 因此,它将包含两个水平

  • 问题内容: 我正在 RecyclerView上* 工作,并尝试使用 Interface来 对recyclcerview的每个项目使用点击监听器 * 这是我的活动课: 这是我的适配器类 最后我将这个接口用于侦听器: 此过程可以正常运行我的应用程序的所有其他部分,但不适用于这种情况。我不知道问题出在哪里。请帮我 。 问题答案: 您这种方法:

  • 我有以下一段代码: 这是我得到的错误: 还有这个: 我错过了什么?

  • 在我的主要活动中,我有三个循环利用的观点。 其中一个在底部工作表中,它是主要的(默认情况下,底部工作表是打开以显示这个),在其适配器的onbind方法中,我做了一个onClickListener,以便当用户单击其中的项目时,我想要, 我想回到主活动类来设置To Start一个方法,它的滚动是关闭底表并为下一个回收视图设置数据(当底表关闭时会出现) ......这里的问题是如何从onBind方法的L

  • 一切正常。但Logcat中显示了一些错误。 E/RecyclerView:未附加适配器;跳过布局 E/RecyclerView:未附加适配器;跳过布局 我的activity代码: 我读过与同一问题有关的其他问题,但都没有帮助。请帮帮我

  • 我在向我的GsonBuilder注册多个TypeAdapter时遇到问题。似乎只有一个会开火,而第二个永远不会被考虑。如果我单独使用每一个,它似乎工作得很好。但我需要他们一起工作,而且似乎我做错了什么。此外,我目前正在使用GSON v2。2.4. Zip对象简单表单: 拉链系列: 简单形式: JsonResponseSerializer: 测试示例: 输出: 预期输出:(注意ZipSerializ