【问题标题】:Event called when gridview/listview have been populated填充 gridview/listview 时调用的事件
【发布时间】:2014-02-23 13:35:32
【问题描述】:

对于复杂的适配器,GridViews 和 ListViews 在调用 setAdapter() 方法后有时可能需要很长时间才能填充。当视图成功填充数据并准备好显示时,是否有我们可以覆盖的方法?

【问题讨论】:

  • 能贴出适配器的代码吗?
  • 不,它还没有准备好显示,它在准备好时显示...... :) 异步处理加载图像等复杂任务。您可以在 GetView 中生成一个工作线程,或者拥有一个将工作传递给的通用线程。

标签: android android-listview adapter android-gridview android-adapter


【解决方案1】:

我的感觉是,不是setAdapter() 需要很长时间,而是复杂的适配器正在做一些复杂的事情。 ListView 和 GridViews 被指定为相当快的工作,但有几个原因它们可能会变慢。这里有一些关于如何解决这个问题的想法。

  1. 弄清楚是什么花了这么长时间。网络调用、大型数据库查询和加载大型文件(尤其是位图)通常是罪魁祸首。如果你没有这些,试着分析你的代码,看看你能从中得到什么。
  2. 一旦你找出了罪魁祸首,看看你能做些什么来减少时间。也许缩小位图的大小,或者使用更好的数据库查询会起作用。
  3. 如果您不能再缩短时间,请在AsyncTask 中执行复杂任务。这将在后台执行代码的复杂部分,并且仅在完成时显示结果。这适用于网络调用、加载位图等。

【讨论】:

  • 我已经有一个AsyncTask 进行网络操作以首先获取数据。不知道为什么我不把setAdapter() 方法放在里面。 Duuurrrrrrr,我的错。
  • 将 Adapter 的冗长组件放入 AsyncTask 可能比调用 setAdapter 更好,但是...
  • 我不能将setAdapter 放在AsyncTask 中,因为它返回错误Only the original thread that created the view hierachy can touch it's views. 但是我所做的是在AsyncTask 中实例化适配器并将@987654331 onPostExecute 函数中的 @ 代码。现在效果好多了 - 干杯。
猜你喜欢
  • 2023-03-13
  • 2021-03-25
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 2018-08-13
相关资源
最近更新 更多