[英]updating ListView from AsyncTask
我有兩個類HomeActivity和CustomListAdapter.HomeActivity類擴展了一個活動,然后更新了一個listview。我正在使用一個擴展BaseAsapter的CustomListAdapter類將數據填充到listview中。一切工作正常,但我想將數據加載到一個后台任務。當我這樣做時,出現錯誤。 這是AyncTask類的onPostExecute的實現。
@Override
protected void onPostExecute(HomeActivity Params){
progressDialog.dismiss();
runOnUiThread(new Runnable(){
public void run(){
final ListView lv1 = (ListView) findViewById(R.id.listings);
lv1.setAdapter(new CustomListAdapter(this, shares));
}
});
}
我收到一條錯誤消息,告訴我應該更改CustomListAdapter上的構造函數。但是當我更改它時,一切都會變得艱難。 我也嘗試了失敗
final ListView lv1 = (ListView) findViewById(R.id.listings);
lv1.setAdapter(new CustomListAdapter(this, shares));
共享是來自Web服務的數據的數組列表。 這是CustomListAdapter類中的構造函數
public CustomListAdapter(Context context, ArrayList listData) {
this.listData = listData;
layoutInflater = LayoutInflater.from(context);
}
怎么辦?我們將不勝感激。
您必須更改:
@Override
protected void onPostExecute(HomeActivity Params){
progressDialog.dismiss();
runOnUiThread(new Runnable(){
public void run(){
final ListView lv1 = (ListView) findViewById(R.id.listings);
lv1.setAdapter(new CustomListAdapter(YourActivity.this, shares));
}
});
}
看到下面的代碼對我有用
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
progressDilaog.dismiss();
itemListAdapter = new ItemListBaseAdapter(
IncidentListActivity.this, Util.arrIncidents);
gridView.setAdapter(itemListAdapter);
}
還有一件事,您在onPostExecute方法中不需要 runOnUiThread
。 您可以直接更改列表視圖。
您正在將AsyncTask上下文發送到Adapter,應將承載Listview的Activity上下文放到AsyncTask類,然后使用該上下文構造您的Adapter。
編輯 :以示例為例,默認情況下onPostExecute在Ui線程上運行,並且不需要定義runOnUiThread
public class SyncHandler extends AsyncTask<String, Void, ResponseType>{
private Activity activity;
public SyncHandler (Activity activity)
{
this.activity = activity;
}
然后在您的調用Activity中將Activity上下文傳遞給您的Async類:
new SyncHandler(this).execute();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.