【问题标题】:can't update list adapter in list view while posting in onPostExecute adapter.notifyDataSetChanged();在 onPostExecute adapter.notifyDataSetChanged() 中发布时无法更新列表视图中的列表适配器;
【发布时间】:2012-11-18 20:13:56
【问题描述】:

基本上我已经尝试这样做了 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 合作

【问题讨论】:

  • 您忘记将adapter 设置为您的ListView
  • 不,我没有照顾 super.oncreate

标签: android android-asynctask android-arrayadapter reload


【解决方案1】:

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

【讨论】:

  • 对不起,我不明白为什么这不是我之前创建的那个女巫。我确实在 super.oncreate 之后设置了适配器 抱歉被问到 inet 已关闭(有没有一种方法可以在不丢失参考的情况下切换到新适配器?
  • 你可以再次调用 setListAdapter。
  • protected void onPostExecute(Void result) { // ((BaseAdapter) Table.this.getListAdapter()).notifyDataSetChanged(); setListAdapter(适配器); dialog.dismiss(); }
  • thnx 一切正常,只是在标题中删除了这个适配器并在 doinbackground 中初始化,而不是转移到后执行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多