簡體   English   中英

從AsyncTask更新ListView

[英]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.

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