android - RecyclerView 适配器 notifyDataSetChanged 不起作用

标签 android android-adapter android-recyclerview notifydatasetchanged

我扩展了

RecyclerView.Adapter<RecyclerView.ViewHolder>

当我打电话时:

mRecyclerView.getAdapter().notifyDataSetChanged();

什么也没发生。

刷新 View 的唯一方法是再次设置适配器(see this answer):

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

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

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

有什么想法吗?

最佳答案

如果 notifyDataSetChanged() 没有触发 View 更新,那么您有可能忘记在 RecyclerView 上调用 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(adapter);

如果你喜欢在 xml 中声明它,所以你不能在代码中忘记它,你也可以将这些行添加到你的 recyclerView 的 xml 中:

app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:orientation="vertical"

关于android - RecyclerView 适配器 notifyDataSetChanged 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27714127/

相关文章:

android - 如何在 RecyclerView Adapter 中使用 TextWatcher

java - 当我们打开 Android 应用程序时,主 UI 线程会执行哪些操作

java - Jsoup 在第一个元素之后选择元素

android - Android 上的 Unicode 字符

android - 从另一个 Activity 使用 SharedPreferences 在 ArrayListAdapter 中添加项目

java - 没有附加适配器,在 fragment 中使用 reyclerview 和 json 跳过布局

android - 为什么 `PagerAdapter::notifyDataSetChanged` 没有更新 View ?

java - 如何使用数组从 firebase 查询?

java - 单击同一按钮时,如何在一项 Activity 中显示不同的内容

android - 如何测试 Android ActionBar 子菜单?