两次调用startManagingCursor会使我的数据消失

时间:2011-07-06 12:38:37

标签: android sqlite cursor

我有这个方法用于用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()吗?

1 个答案:

答案 0 :(得分:1)

  

调用startManagingCursor()是否错误,是否应该在onCreate()方法中?

这应该没问题。

  

我应该在某个时刻实际调用stopManagingCursor()吗?

当您不再需要管理Cursor时(例如,您要替换它),请致电stopManagingCursor()