簡體   English   中英

從不同的AsyncTask更改AsyncTask中的布局

[英]Alter layout in AsyncTask from a different AsyncTask

我要執行以下操作。 我想顯示一個包含信息和圖像的列表。 這些圖像需要一段時間才能加載,所以我想我會做不同的事情。 我將使用兩個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,然后將Images的URL作為參數傳遞。 然后在doInBackgroundMethod中添加圖像。 但是,如何在新的AsyncTask中使用另一個AsyncTask的布局? 如果我將圖像留空,是否會破壞整個布局?

做這樣的延遲加載的最佳方法是什么?

我在這里沒有任何問題。 AsyncTaskonPosExecute方法在UIThread運行,您可以在UIThread訪問任何ui組件。 總而言之,您的流程一定是這樣的:

  1. 使用AsyncTask加載數據,讓我將其命名為NoImageAsyncTask 此任務將對其doInBackground方法執行長時間操作,該方法在與UIThread分開的線程上運行。

  2. NoImageAsyncTask完成后,將調用其onPosExecute方法。 由於onPostExecute方法在UIThread運行, UIThread您現在可以通過此數據更新UI。

  3. onPostExecute方法中,開始n(n是從獲取的數據中獲得的imageUrl的數量)新的AsyncTasks (我將其命名為ImageAsyncTask )。 這些ImageAsyncTasks應當在其doInBackground方法上下載圖像。 下載完成onPostExecute將觸發onPostExecute ,您現在就可以獲取圖像。 您可以在onPostExecute方法上更新UI,因為它在UIThreadUIThread

順便說一句,我建議您使用庫進行圖像加載。 我目前正在使用Shutterbug

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM