我扩展了
RecyclerView.Adapter<RecyclerView.ViewHolder>
当我打电话时:
mRecyclerView.getAdapter().notifyDataSetChanged();
什么也没发生。
刷新 View 的唯一方法是再次设置适配器(see this answer):
mRecyclerView.setAdapter(new MyAdapter(...));
我对这个解决方案有两个问题:
- 当我再次设置适配器时,我可以看到屏幕闪烁
- 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/