当前位置: 代码迷 >> 综合 >> RecyclerView 中adapter.notifyDataSetChanged()无效的问题
  详细解决方案

RecyclerView 中adapter.notifyDataSetChanged()无效的问题

热度:85   发布时间:2023-12-13 05:52:49.0

网上找了很多答案,看了很多博客,让我感觉都讲得模模糊糊,最后是这篇博客解决了我的问题:http://blog.csdn.net/csdn_lqr/article/details/50947825

其实要让notifyDataSetChanged()有效就只是一个要点数据源有变化

而在我的项目中导致数据源没有发生变化的原因是:

private List<String> resultList = new ArrayList<>();//数据源fab.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {/*...其他操作*/resultList = Calc.Calculate();adapter.notifyDataSetChanged();}}
});
public class Calc {
    //用于临时存放结果。private static List<String> result = new ArrayList<>();public static List<String> Calculate(){/*其他操作*/return result;}
}

在每次调用Calc.Calculate()方法时,都new了一个新的临时变量,所以返回给resultLIst的并不是同一个数据源(即新数据保存在新new的一个空间里),导致一开始给adapter配置的数据源始终无变化。

我的方法是将数据源传入Calculate方法中。

private List<String> resultList = new ArrayList<>();//数据源fab.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {/*...其他操作*/Calc.Calculate(resultList);adapter.notifyDataSetChanged();}}
});
public class Calc {
    public static void Calculate(List<String> result){/*其他操作*/}
}
  相关解决方案