こんにちは私は非同期操作の後にリストビューをリフレッシュする問題があります。
私はシンプルカーソルアダプターと、リストビューとボタンを持っています。最初にアプリケーションが起動すると、データベースから読み取られたデータからリストビューが設定されます。ユーザーがボタンをクリックすると、データベースに挿入されるいくつかのデータをダウンロードする非同期コードが開始されます。非同期タスクが開始すると、progressdialogが表示されます。これをpostexecute()で終了します。データはうまくダウンロードされていますが、バックグラウンドジョブが完了した後、メインスレッドでカーソルを再クエリしてリストビューを更新するにはどうすればよいですか?android asynctaskは、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
}
非同期操作が完了した直後に新しいリストデータでリストビューが更新されることはありません。しかし、リストビューに別のアティビティとカムバックを呼び出すと、新しいアイテム(リストの更新)がすべて表示されます。
私には何が欠けていますか?
Tedしかし、myDBAdapterのnotifyDataSetChanged()メソッドはありませんか? – Atarang
テッドの提案が働いた。しかし、私は非同期タスクにlistViewAdapterを渡し、postExecute()のlistViewAdapter.notifyDataSetChanged()を呼び出さなければなりませんでした。 – Atarang
@Atarangあなたはそれが働いてうれしい。受け入れてくれてありがとう。 –