RecyclerView适配器notifyDataSetChanged不起作用

我延长了

RecyclerView.Adapter<RecyclerView.ViewHolder> 

而当我打电话给:

 mRecyclerView.getAdapter().notifyDataSetChanged(); 

什么都没发生。

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

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

我有这个解决scheme的两个问题:

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

有任何想法吗?

Solutions Collecting From Web of "RecyclerView适配器notifyDataSetChanged不起作用"

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

如果notifyDataSetChanged()不会触发视图更新,那么您有可能忘记在您的RecyclerView上调用SetLayoutManager() (就像我做的那样)。 只是不要忘记这样做:

 var manager = new LinearLayoutManager(Context, LinearLayoutManager.Vertical, false); _list.SetLayoutManager(manager); 

在调用SetAdapter() ;

对不起,C#代码,我使用Xamarin。

根据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(); } 

我正在使用Retrofit来获取列表,对Retrofit的onResponse()的使用,

 adapter.swap(feedList); 

想分享一些东西,我面临同样的问题。 但是我做错了什么。 我每次都是在创buildAdapter的实例,而不是将notifysetDatachange()作为新的实例,而不是旧的实例。

所以请确保你的notifysetDatachange()适配器应该更旧一个。 希望下面的例子帮助..

  MyAdapter mAdapter = new MyAdapter(...) mRecyclerView.setAdapter(mAdapter ); // TODO mAdapter.modifyData(....); mAdapter.notifySetDataChange(); MyAdapter extends baseAdapter { MyAdapter () { } modifyData(String[] listData) { } } 

notifyDataSetChanged()在主线程中调用sholud。