首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RecyclerView适配器notifyDataSetChanged不工作

RecyclerView适配器notifyDataSetChanged不工作
EN

Stack Overflow用户
提问于 2014-12-31 07:32:39
回答 8查看 43.9K关注 0票数 32

我扩展了

RecyclerView.Adapter<RecyclerView.ViewHolder>

当我打电话的时候:

mRecyclerView.getAdapter().notifyDataSetChanged();

什么都没发生。

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

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

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

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

有什么想法吗?

EN

回答 8

Stack Overflow用户

发布于 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"
票数 36
EN

Stack Overflow用户

发布于 2015-10-15 06:11:39

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

票数 28
EN

Stack Overflow用户

发布于 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);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27714127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档