Привет, У меня возникла проблема с обновлением моего списка после операции Async.
У меня есть simplecursoradapter, и custon listview и кнопка. Первоначально, когда приложение запускается, он устанавливает список из данных, считанных из базы данных. Затем, когда пользователь нажимает кнопку, он запускает асинхронный код для загрузки некоторых данных, которые вставляются в базу данных. Когда запускается задача async, я показываю progressdialog, который я увольняю в postexecute(). Данные получаются загруженными в порядке, но теперь как я запрашиваю курсор и список обновлений в основном потоке после выполнения фонового задания?android asynctask update to listview в postexecute
Метод «refreshRemoteData» вызывается через кнопку меню.
Как выглядит моя AsyncTask.
public class MyActivity extends ListActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void onStart() {
myDBAdapter = new DBAdapter(this);
myDBAdapter.open();
populateMyList();
}
private void populateMyList() {
myCursor = myDBAdapter.fetchAllItems();
startManagingCursor(myCursor);
getListView().setAdapter(myDBAdapter);
}
private void refreshRemoteData() {
mPleaseWaitDialog = ProgressDialog.show(ExpirationDateTrackingActivity.this,
"Data", "Downloading data", true, true);
download_task = new InfoDownloaderTask();
download_task.execute();
}
private class InfoDownloaderTask extends AsyncTask<Object, String, Boolean> {
private static final String DEBUG_TAG = "InfoDownloaderTask";
protected DBAdapter mylocalDBAdapter=null;
@Override
protected void onPreExecute() {
Log.e(DEBUG_TAG, "onPreExecute: ");
mylocalDBAdapter = new DBAdapter(this);
mylocalDBAdapter.open();
}
@Override
protected void onPostExecute(Boolean result) {
Log.i(DEBUG_TAG, "onPostExecute: ");
mPleaseWaitDialog.dismiss();
mlocalDBAdapter.close();
}
@Override
protected Boolean doInBackground(Object... arg0) {
Log.v(DEBUG_TAG, "doInBackground");
///...
//Update the database
mylocalDBAdapter.insertData(....);
return true;
}
} //AsyncTask
}
Я не вижу, чтобы мой список просматривался с новыми данными списка сразу после завершения операции async. Но если я вызываю другую активность и возвращаюсь к списку, я вижу все новые элементы (обновление списка).
Что мне не хватает?
Тед, но не существует метода notifyDataSetChanged() для myDBAdapter? – Atarang
Предложение Теда сработало. Но мне пришлось передать listViewAdapter в задачу Async и вызвать listViewAdapter.notifyDataSetChanged() в postExecute(). – Atarang
@Atarang Рад, что у вас это работает. Спасибо за согласие. –