我有这个方法用于用sqlite数据库中的数据填充listview。它在应用程序启动时按预期工作:
private void populateListView() {
Cursor showsCursor = mDbHelper.fetchAllSummaries();
startManagingCursor(showsCursor);
// Create an array to specify the fields we want to display in the list
String[] from = new String[]{DbAdapter.SUMMARY_TITLE, DbAdapter.SUMMARY_DATE, DbAdapter.SUMMARY_SUMMARY};
// and an array of the fields we want to bind those fields to
int[] to = new int[]{R.id.showtitle, R.id.showdate, R.id.showsummary};
// Now create a simple cursor adapter and set it to display
SimpleCursorAdapter shows =
new SimpleCursorAdapter(this, R.layout.custom_row_view, showsCursor, from, to);
setListAdapter(shows);
}
然后我还有一个Refresh菜单项,用于更新数据库并再次调用populateListView()以使用更新的数据填充listview。这也出现正常工作。
但不完全是!因为如果我开始另一个活动(例如,通过单击其中一个列表视图项)然后使用后退按钮返回,我的列表视图为空。再次调用populateListView()将重新创建它,但是当从另一个活动返回时它将再次为空。
通过调试,我发现如果省略startManagingCursor(),它就能完美运行。
所以显然两次调用startManagingCursor()会导致意想不到的副作用。为什么会发生这种情况?如何解决?
调用startManagingCursor()是否错误,是否应该在onCreate()方法中?我应该在某一点实际调用stopManagingCursor()吗?
答案 0 :(得分:1)
调用startManagingCursor()是否错误,是否应该在onCreate()方法中?
这应该没问题。
我应该在某个时刻实际调用stopManagingCursor()吗?
当您不再需要管理Cursor
时(例如,您要替换它),请致电stopManagingCursor()
。