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

本文详细解析了在使用notifyDataSetChanged()刷新数据时遇到的问题及解决方案。指出若在更新数据源时每次都创建新对象而非更新原有对象,则notifyDataSetChanged()将无法生效。通过改进数据更新方式,确保数据源的有效变更。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值