[英]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的布局? 如果我將圖像留空,是否會破壞整個布局?
做這樣的延遲加載的最佳方法是什么?
我在這里沒有任何問題。 AsyncTask
的onPosExecute
方法在UIThread
運行,您可以在UIThread
訪問任何ui組件。 總而言之,您的流程一定是這樣的:
使用AsyncTask
加載數據,讓我將其命名為NoImageAsyncTask
。 此任務將對其doInBackground
方法執行長時間操作,該方法在與UIThread
分開的線程上運行。
NoImageAsyncTask
完成后,將調用其onPosExecute
方法。 由於onPostExecute
方法在UIThread
運行, UIThread
您現在可以通過此數據更新UI。
在onPostExecute
方法中,開始n(n是從獲取的數據中獲得的imageUrl的數量)新的AsyncTasks
(我將其命名為ImageAsyncTask
)。 這些ImageAsyncTasks
應當在其doInBackground
方法上下載圖像。 下載完成onPostExecute
將觸發onPostExecute
,您現在就可以獲取圖像。 您可以在onPostExecute
方法上更新UI,因為它在UIThread
上UIThread
。
順便說一句,我建議您使用庫進行圖像加載。 我目前正在使用Shutterbug 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.