目前我有一个 GridView,每个元素都应该有一个单独的 ProgressBar。这些元素代表单独的下载,我想使用这些进度条显示下载的状态。
但我应该如何更新它们呢?我的问题是,根据文档(以及我在 Google IO 视频中听到的内容),更新 AdapterViews 中元素的唯一方法是更新分配的适配器,并在每次更新后调用 .notifyDatasetChanged() 。
当然,这在这种情况下也确实有效,但更新非常频繁(5-10 秒更新)。以此频率调用 .notifyDatasetChanged 会中断与 GridView 的任何交互。例如。用户尝试长按网格中的某个项目,但单击事件停止,因为调用了 .notifyDatasetChanged 来更新下载进度。
还有其他方法可以做到这一点吗?我应该放弃 AdapterViews 并使用其他东西吗?
对于像您这样频繁更新(每秒多次)的情况,notifyDatasetChanged 不是正确的方法 - 您需要直接更新各个视图。
如果没有看到您的代码以及文件下载和 GridView 中的条目之间的关系,很难准确说出您需要什么调用,但是:
-GridView 有一个“getChildAt”,您可以使用它来获取特定索引处的视图。
- 如果视图甚至不可见,则更新视图是没有意义的。如果它不在 getFirstVisiblePosition() 和 getLastVisiblePosition() 之间,请忽略它,每当重绘时都会使用更新的数据进行绘制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)