在onPostExecute adapter.notifyDataSetChanged()中发布时,无法更新列表视图中的列表适配器

时间:2012-11-30 15:24:29

标签: android android-asynctask android-arrayadapter reload

基本上我已经尝试过这个该死的超过40个小时 - 阅读所有关于它的线程仍然没有结果!所以我在onPostExecute adapter.notifyDataSetChanged()中发布时无法在列表视图中更新列表适配器;

ArrayAdapter<String> adapter;
private ProgressDialog dialog;



protected void onCreate(Bundle savedInstanceState) 
{

    super.onCreate(savedInstanceState);

    setListAdapter(adapter);
    dialog = new ProgressDialog(
            Table.this);
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.setMessage("Загружаю. Подождите..."); 

    AsyncTask<Void, Void, Void> loadingTask = new AsyncTask<Void, Void, Void>() {
        @Override
        protected void onPreExecute() {                                     
              dialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {                 

  ........ adapter = new ArrayAdapter<String>(Table.this,         android.R.layout.simple_list_item_1,CreateStringArray
   .getString(myData, null, null, null, null));

            return null;
        }
        @Override
        protected void onPostExecute(Void result) {  
          adapter.notifyDataSetChanged();      
         Table.this.
            dialog.dismiss();
        }

    };          
    loadingTask.execute();  



    getListView().setOnItemClickListener(this);

}

因此它向我展示了微调器并成功加载并删除它。经过一段时间的调试后,我注意到它成功更改了适配器中的数据。仍然显示它。我正在使用listvew

1 个答案:

答案 0 :(得分:3)

通过在doInBackGround中实例化新的适配器,您将失去对您设置的适配器的引用setListAdapter(adapter);因此,您在OnPostExecute中通知的适配器不是ListView中的适配器。