利用notifyDataSetChanged()方法实现启动活动之后更新 ListView

本文介绍了一种更新Android应用中ListView的有效方法。当数据发生变化时,通过先清空原有数据再加载新数据的方式,确保adapter能够正确反映最新的数据变更。

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

启动活动之后更新 ListView

使用 ListView 的时候,在活动启动之后,如果 ListView 的数据有一些变更,该如何将变更之后的数据显示在界面上,要用到 adapternotifyDataSetChanged() 方法,但是在数据改变之后直接 adapter.notifyDataSetChanged(); 却是更新不出来的,必须要修改一些地方,先清除 list 中的数据,再加载更新后的数据,在使用这个方法。

private List<???> list = new ArrayList<>();
private ListView listView = (ListView)findViewById(R.id.listView);
private ListAdapter adapter = null;
if (list.size() == 0) {
    //加载所有
    ******
    adapter = new ListAdapter(list,???);
    listView.setAdapter(adapter);
} else {
    //加载变更之后的数据
    list.clear();                    //先清除 List 中的数据
    list.addAll(***);                //然后在加载更新后的所有的数据
    adapter.notifyDataSetChanged();  //更新数据
}

为什么不能直接用哪个方法?第一次 adapter 加载 list 的时候 adapter 保存的 list 指向的是一开始 List 的引用,在更新了数据之后,list 指向了新的 List 引用,但是 adapter 保存的 list 指向的还是原来的引用,因此在调用 notifyDataSetChanged() 时,adapter 会跟据原来的引用去更新,因此当然还是原来的结果,不会进行更新。进行以上操作之后, adapter 保存的是指向的是新的 List 的引用,就更新了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值