0

我想做以下事情。我想显示一个包含信息和图像的列表。这些图像需要一段时间才能加载,所以我想我会做不同的事情。我会使用两个 AsyncTasks。第一个创建所有布局并用除图像之外的数据填充它。第二个只是将图像插入到布局中。我遇到的问题是,我不知道这怎么可能?

在我的第一个 AsyncTask 中,我正在创建 TableLayouts 和行,然后用数据填充它们

这只是我的一些代码,以了解我如何创建布局

在这里,我首先创建了 TableLayouts 和 TableRows

tableLayout [i] = new TableLayout   (getActivity());
headingRow  [i] = new TableRow      (getActivity());
headlineRow [i] = new TableRow      (getActivity());
imageDescRow[i] = new TableRow      (getActivity());
spaceView   [i] = new LinearLayout  (getActivity());

然后我用数据填充 TextViews

headline    [i].setText( headlineArr    [i] );
date        [i].setText( realDate           );
source      [i].setText( sourceArr      [i] );
description [i].setText( descriptionArr [i] );

然后我将 TextViews 添加到表格中,并将表格添加到布局中。代码当然要大得多,而且比我刚才所做的要多得多。它工作没有任何问题。仍然遇到的唯一问题是图像加载需要很长时间才能加载,我不想仅仅因为图像正在加载而阻止用户使用我的应用程序。

最好的方法是什么?我以为我会从当前的 asynctask 在 onPostExecute 方法中创建另一个 AsyncTask 并将图像的 URL 作为参数传递。然后在 doInBackgroundMethod 中添加图像。但是如何在新的 AsyncTask 中使用来自另一个 AsyncTask 的布局?如果我将图像留空,它不会破坏整个布局吗?

进行这种延迟加载的最佳方法是什么?

4

1 回答 1

1

我在这里没有看到任何问题。AsyncTaskonPosExecute方法继续运行UIThread,您可以访问那里的任何 ui 组件。总而言之,您的流程必须是这样的:

  1. AsyncTask使用let me name it加载数据NoImageAsyncTask。此任务将对其doInBackground在单独线程上运行的方法执行长时间操作,而不是UIThread.

  2. 完成后,将调用NoImageAsyncTask其方法。onPosExecute由于onPostExecute方法在 上运行UIThread,您现在可以使用此数据更新您的 UI。

  3. onPostExecute方法中,开始 n(n 是您从获得的数据中获得的 imageUrls 的计数)新的AsyncTasks(让我命名 ImageAsyncTask)。这些' 应该在他们的方法ImageAsyncTasks上下载图像。doInBackground下载完成onPostExecute 后将触发您现在获取图像。您可以更新您的 UI ononPostExecute方法,因为它运行在UIThread.

顺便说一句,我建议您使用库来加载图像。我目前正在为此使用Shutterbug

于 2013-10-29T10:06:57.787 回答