gpt4 book ai didi

android - 我怎样才能让我的 Cursor 在方向改变时存活下来?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:10 24 4
gpt4 key购买 nike

我正在努力使我的应用旋转友好,但我在保存光标时遇到了一些问题。

游标在 ListView 中显示了大约 13k+ 行数据,因此如果每次配置更改时我都重新查询,将花费相当长的时间。在我的 onRetainNonConfigurationInstance() 中,我返回我的 Cursor,然后通过 getLastNonConfigurationInstance() 检索它。

但是,我检索到的游标似乎已经关闭,因此我的适配器无法再呈现列表。据我了解,游标已关闭,因为 onDestroy() 会自动关闭所有游标。

我这样保存 Cursor:

@Override
public Object onRetainNonConfigurationInstance() {
return myCursor;
}

然后像这样检索它:

myCursor = (Cursor)getLastNonConfigurationInstance();
if (myCursor == null) {
// Do some stuff here (access DB, etc)
} else { // we are returning from configuration change
// Feed the cursor to the adapter
}

如果有人想看,我正在粘贴堆栈跟踪:

01-25 16:57:45.637: ERROR/AndroidRuntime(12976): android.database.StaleDataException: Access closed cursor
01-25 16:57:45.637: ERROR/AndroidRuntime(12976): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:217)
01-25 16:57:45.637: ERROR/AndroidRuntime(12976): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
01-25 16:57:45.637: ERROR/AndroidRuntime(12976): at com.test.sample.helper.DictionaryAdapter.bindView(DictionaryAdapter.java:35)
[........More ListView-related errors here..........]

我单步执行代码,发现就 onRetainNonConfigurationInstance() 而言,游标仍处于打开状态,但在通过 getLastNonConfigurationInstance() 获取后,它是已经关闭。

如何让我的 Cursor 在方向改变时存活下来?感谢您的帮助!

编辑:根据 Romain 的回答,我注释掉了我所有的 startManagingCursor()。我应该把这些点联系起来并考虑一下!无论如何,我的应用程序现在在旋转一圈后仍然存在,但将其翻转回原始方向仍然会导致崩溃。继续我的调试并将让您知道我发现了什么。

编辑 2:我想我可能已经找到导致新错误的原因。我实现了一个返回新 Cursor 的 FilterQueryProvider。我所做的是将该过滤器的结果分配给我原来的 Cursor。到目前为止似乎有效。

最佳答案

您可能正在使用托管游标。当 Activity 被销毁时,托管游标会自动关闭。您应该切换到非托管 Cursor。

关于android - 我怎样才能让我的 Cursor 在方向改变时存活下来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4791720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com