添加/删除动态数据后如何刷新Android ListView ?
#1楼
请忽略所有对此问题的invalidate() , invalidateViews() , requestLayout() ,...答案。
故障排除
如果调用notifyDataSetChanged()不起作用,则所有布局方法也无济于事。 相信我ListView已正确更新。 如果找不到差异,则需要检查适配器中数据的来源。
如果这只是一个集合,则您要保留在内存中,然后在调用notifyDataSetChanged()之前检查是否已从集合中实际删除或添加了项目。
如果您使用的是数据库或服务后端,则必须在调用notifyDataSetChanged()之前调用该方法以再次检索信息(或操作内存中的数据notifyDataSetChanged() 。
事情是, notifyDataSetChanged仅在数据集已更改的情况下有效。 因此,如果找不到更改,那就可以在这里查找。 如果需要调试。
ArrayAdapter与BaseAdapter
我确实发现,使用适配器可以管理集合,就像使用BaseAdapter更好。 某些适配器(例如ArrayAdapter)已经管理了自己的集合,这使得更难到达正确的集合进行更新。 在大多数情况下,这实际上只是不必要的额外难度。
UI线程
确实,这必须从UI线程中调用。 其他答案包含有关如何实现此目的的示例。 但是,仅当您正在UI线程外部处理此信息时才需要这样做。 那是来自服务或非UI线程的。 在简单的情况下,您将通过单击按钮或其他活动/片段来更新数据。 因此仍在UI线程内。 无需始终将该runOnUiTrhead弹出。
快速示例项目<