Android中ListView数据使用sAdapter.notifyDataSetChanged();方法不刷新的问题

本文总结了Android中ListView数据刷新时遇到的问题,包括:1) 使用数据库时,更新数据源后需要先清空再添加,然后通知Adapter;2) 布局XML中ListView的height设为"wrap_content"可能导致不更新,应改为"match_parent";3) 数据或List未正确更新也可能导致不刷新。确保正确操作以避免此类问题。

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

之前被问到过很多次这个问题,后来干脆总结一下可能出现不刷新的几个点;

1.涉及到数据库

当要动态显示更数据库改动,相信大家应该都用过notifyDataSetChanged();. 
例如:
          ...... 
         private ArrayList<HashMap<String, Object>> usersList; 
          ...... 
         usersList= query(......);     //根据查询函数获取一个ArrayList并赋值给绑定到Adapter的数据源usersList 
         sAdapter.notifyDataSetChanged();  
         上面这种形式去刷新ListView的数据的话, 是不可以更新的. 必须改成如下形式: 
          usersList.clear();  //先清空集合
          usersList.addAll(query(......)); 
          sAdapter.notifyDataSetChanged(); 
原因是:   

 Adapter在调用super(MyActivity.this, R.layout.item, usersList)时Adapter保存了指向原List的引用,在调用query函数之后,usersList指向了一个新的List。但是在调用notifyDataSetChanged()时,Adapter会跟据保存的引用去更新,因此当然还是原来的结果,不会进行更新。

2.布局xml中属性值的问题

当你布局中ListView的android:layout_height="wrap_content"时,可能导致页面没有及时更新而出现数据不更新的问题只要将ListView的布局属性更改为android:layout_height="match_parent"即可。

3.其他问题可能就是数据或者List没有及时update里面的数据


还有其他问题请给我留言!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值