【问题标题】:Android Custom ListView with contact image带有联系人图像的 Android 自定义 ListView
【发布时间】:2012-12-03 09:53:44
【问题描述】:

我需要在我的自定义 ListView 中显示用户的联系人图片。我可以通过 AsyncTask 获取图像,但我无法设置图像,因为在 AsyncTask 完成之前列表视图已经被加载。我正在为列表视图的每一行调用 AsycTask。 AsyncTask 完成后,我手头有 Image Uri。请就如何做到这一点提供一些想法。

我正在使用自定义基本适配器来执行此操作。如果我使用 AsyncTask().get() 方法,我可以填充 ImageView,但它会阻塞 UI 线程并使 AsyncTask 的用途无效。

【问题讨论】:

    标签: android android-contacts android-custom-view


    【解决方案1】:

    您可以在 AsyncTask 的 onPostExecute() 方法中加载 ListView。这样,您将保证 Async 任务将在您的 ListView 加载之前完成。

    您可以在 AsyncTask 执行时显示ProgressDialog,让用户知道正在获取数据。

    【讨论】:

    • 感谢您的回答,但 AsyncTask 需要 10 多秒才能加载。我的想法是显示一个虚拟图标,稍后在 AsyncTask 完成后,显示真实的图标
    【解决方案2】:

    这取决于您使用的ListAdapter,但例如,如果您使用的是ArrayAdapter,我认为您可以调用ArrayAdapter.notifyDataSetChanged(),它会重新加载所有您(可见) 使用ArrayAdapter.getView() 的视图。

    更复杂的选项是保存对ImageViews 的引用,但这会有点棘手,因为列表只保留可见列表行的视图。

    【讨论】:

    • 我正在为 ListView 使用自定义 BaseAdapter。持有者类用于保存 TextViews 和 ImageView。无论如何我可以通过图像 Uri.??提前致谢
    • 其实有BaseAdapter.notifyDataSetChanged()。就这么叫吧。
    【解决方案3】:

    终于找到问题所在了。。 我的 AsyncTask 类的 onPostExecute() 方法在 doInBackground() 之后没有被执行。 不调用它的原因是它只能接受 Object 参数,例如 onPostExecute(Object.. args)。我所有的图像设置代码都写在 onPostExecute() 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-26
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 2021-04-27
      相关资源
      最近更新 更多