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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Rec_Mervyn/article/details/76788087

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

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

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

private List<String> resultList = new ArrayList<>();//数据源

fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public 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() {
    @Override
    public void onClick(View view) {
        /*
        ...
        其他操作
        */
        Calc.Calculate(resultList);
        adapter.notifyDataSetChanged();
    }
    }
});
public class Calc {

    public static void Calculate(List<String> result){
        /*其他操作*/
    }
}

猜你喜欢

转载自blog.csdn.net/Rec_Mervyn/article/details/76788087