gpt4 book ai didi

android - 如何使用动态数据实时更新Android ListView?

转载 作者:可可西里 更新时间:2023-11-01 19:06:34 25 4
gpt4 key购买 nike

我有一个后台线程加载数据,我想在 Android ListView 中显示这些数据。数据变化非常频繁(即每秒 1-2 次)。有时数据集中的行数也会发生变化(但肯定不会像单元格中的数据变化那样频繁)。

据我所知,有两种方法可以更新单元格中的数据:

  1. 让后台线程通知 UI 线程新数据已准备就绪,然后 UI 线程可以调用 BaseAdapter.notifyDataSetChanged()。但是,我在不止一个地方读到,如果经常调用该方法,它会很慢,因为 ListView 必须重构其所有 subview View 。

  2. 如果数据集计数未更改,我可能会找到与已更改数据关联的所有可见 ListView 单元格,并在不调用 notifyDataSetChanged() 的情况下手动更新值。这可能会起作用,但我认为不幸的是,当列表适配器应该在我通知它时为我处理更新通知和机制时,我必须手动更新 View 。如果数据集计数随时间变化(即不仅 ListView 的每个单元格内的数据发生变化,而且 ListView 中的单元格总数可以根据提供实时数据的后台线程增长或缩小),此方法也将不起作用).

我当然会感谢其他实现此方案的人的想法,以及他们如何优化代码简单性和最重要的是性能。

最佳答案

我试验了 ListView,如果您有实时数据,您基本上必须手动更新 ListView 单元格而不调用 notifyDataSetChanged() 并且您希望 ListView 以更好的性能进行更新。

notifyDataSetChanged() 导致 ListView 重建其整个 View 层次结构如果您经常调用它(即每秒一次),它会非常慢).

注释 (2014)。如果您使用带有 ViewHolder 模式的普通现代 ListView,则这不适用。您只需调用“notifyDataSetChanged”即可。 Android 知道仅更新屏幕上的单元格是非常高效的。

我实现了一种方案,如果我的数据集大小从一次更新更改为下一次更新,我将调用 notifyDataSetChanged()。如果数据集大小从一次更新到下一次更新保持不变(例如 ListView 中的单元格数量在需要重绘数据时与以前相同),那么我迭代ListView.getFirstVisiblePosition() : getLastVisiblePosition(),仅更新可见单元格。

关于android - 如何使用动态数据实时更新Android ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5846385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com