Android - Gridview更新背景上的适配器

时间:2014-01-26 18:04:01

标签: android gridview android-asynctask

我有一个AsyncTask,在“doinbackground”,它更新变量“pics”,稍后在postexecute我更新所有,问题是我想更新适配器,当我更新变量“pics”。我应该声明适配器,并调用notifyDataSetChanged ??

     protected void onPostExecute(String file_url) {
                 // dismiss the dialog after getting all products

            // updating UI from Background Thread
            runOnUiThread(new Runnable() {
                public void run() {
                    /**
                     * Updating parsed JSON data into ListView
                     * */
                    mAdapter = new Gridadapter(tab.this, pics);

                       gridView.setAdapter(mAdapter);
                }
            });

THX!

1 个答案:

答案 0 :(得分:1)

您不需要在onPostExecute中调用runOnUiThread(...)。该方法已在UI线程内调用。

在声明视图的其他组件时可以声明适配器,并且应始终使用相同的实例。 (每次进行更新时都不要创建新的适配器!)

我会创建一个这样的适配器:

public class GridAdapter extends BaseAdapter{

private ArrayList<Items> mItemList;

    public void updateItemList(ArrayList<Items> newItemList){
        this.mItemList = newItemList;
        notifyDataSetChanged();
    }

}

然后实例:

public void onCreate(Bundle savedInstance){
    // ...all the previous code

    mGridView = (GridView) findViewById(R.id.gridview);
    mGridAdapter = new GridAdapter(this);
    mGridView.setAdapter(mGridAdapter);

}

并从onPostExecute调用更新:

protected void onPostExecute(String file_url) {
    mGridAdapter.updateItemList(pics);

}