我有一个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!
答案 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);
}