您好,我在异步操作后刷新了我的列表视图时出现问题 我有一个simplecursoradapter,以及custon listview和一个按钮。最初,当应用程序启动时,它会从数据库中读取的数据设置列表视图。然后,当用户单击按钮时,它会启动异步代码以下载插入数据库的一些数据。当异步任务开始时,我显示了一个progressdialog,我在postexecute()中解除了。数据下载得很好,但现在如何在后台作业完成后重新查询光标并更新主线程上的listview?
方法" 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
}
我没有看到我的列表视图在异步操作完成后立即更新了新的列表数据。但如果我调用另一个活动并回到列表视图,那么我会看到所有新项目(列表更新)。
我错过了什么?
答案 0 :(得分:1)
您正在通过mylocalDBAdapter
插入数据,但您没有告诉myDBAdapter
有关它的信息。尝试在myDBAdapter.notifyDataSetChanged();
结束时致电onPostExecute()
。