gpt4 book ai didi

Android如何正确通知ListView的数据集改变

转载 作者:搜寻专家 更新时间:2023-11-01 07:35:51 24 4
gpt4 key购买 nike

我正在尝试更新我的列表并在我的 Activity 中显示更新后的列表。每次我这样做都会收到以下错误

 The content of the adapter has changed but ListView did not receive a notification.
Make sure the content of your adapter is not modified from a background thread,
but only from the UI thread.

这是我的代码,我使用 AsyncTask 来完成这个任务。我在我的适配器上调用了 notifyDataSetChanged() 但它似乎不起作用。我做错了什么?

  class MyTask extends AsyncTask<Context, Integer, String> {

@Override
protected String doInBackground(Context... params) {
GregorianCalendar currentDateclone = (GregorianCalendar) currentDate.clone();
ListPopulater2.listPopulate(currentDateclone, 7, items, Id);
//method to update list info




}

// -- gets called just before thread begins
@Override
protected void onPreExecute() {
progressdialog = ProgressDialog.show(SectionListExampleActivity.this, "", "Loading..."); //display progress bar
super.onPreExecute();

}

// -- called as soon as doInBackground method completes
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.d("postExecute", "here");
adapter.notifyDataSetChanged();

progressdialog.cancel();
}
}

最佳答案

尝试移动:

ListPopulater2.listPopulate(currentDateclone, 7, items, Id);

到你的onPostExecute

之所以可行,是因为您需要在完成所有后台 Activity 后更新列表,而不是在您进行操作时更新列表。您可以使用 onProgressUpdate,但那是针对您的进度对话框的。更新你的 ListView 应该在你拥有所有数据之后完成,否则,你会得到你所做的错误,因为 UI 在主线程上运行,而你正试图用后台线程更新它。

至于进度对话框,是有目的的。如果您正在做的事情需要一段时间才能完成,该对话框将告诉用户您距离完成后台任务还有多远。

希望这是有道理的。

关于Android如何正确通知ListView的数据集改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11423774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com