我扩展了
RecyclerView.Adapter<RecyclerView.ViewHolder>
当我打电话的时候:
mRecyclerView.getAdapter().notifyDataSetChanged();
什么都没发生。
刷新视图的唯一方法是再次设置适配器(see this answer):
mRecyclerView.setAdapter(new MyAdapter(...));
我对这个解决方案有两个问题:
有什么想法吗?
发布于 2016-10-24 22:00:01
如果notifyDataSetChanged()
没有触发视图更新,那么您就有可能忘记了在RecyclerView上调用SetLayoutManager()
(就像我一样!)。但不要忘了这样做:Java code:
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"
发布于 2015-10-15 06:11:39
如果您的getItemCount()
返回0,那么notifyDataSetChanged()
将不会执行任何操作。确保在初始化适配器时传递的是有效的dataset。
发布于 2015-12-24 14:41:15
根据javadoc的说法:如果您正在编写适配器,如果可以的话,使用更具体的更改事件总是更有效的。依赖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);
https://stackoverflow.com/questions/27714127
复制相似问题