网上找了很多答案,看了很多博客,让我感觉都讲得模模糊糊,最后是这篇博客解决了我的问题: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){/*其他操作*/}
}