gpt4 book ai didi

android - 使用 rawQuery 和 CursorAdapter 时如何关闭我的 Cursor

转载 作者:行者123 更新时间:2023-11-29 14:37:58 31 4
gpt4 key购买 nike

我在我的数据库类中使用 rawQuery 并将光标返回到我的适配器,它是一个 CursorAdapter,我使用自定义 ListView 项目。

在屏幕上绘制 View 后,此光标是否会自动关闭或如何管理此光标?这种情况下的最佳做法是什么?

如果我在 DB 类中关闭此游标,我将无法从我的适配器访问它们。

感谢您花时间和精力帮助我。

编辑添加一些代码 fragment 以便更好地理解

这是我的 Activity 代码:

calAdapter = new CalendarListAdapter(context, dbHelper.getAllCalendars());
drawerList.setAdapter(calAdapter);

这是我的光标

public Cursor getAllCalendars() {
String query = "SELECT calendarId as _id, calendarName, calState, calShow FROM "
+ TABLE_CALENDAR_LIST;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(query, null);
return cursor;
}

最佳答案

您可以在设置新光标后关闭旧光标。 swapCursor() 返回旧的 Cursor,如果没有设置游标则返回 null,如果您尝试交换相同的实例也返回 null之前设置的光标。知道了这一点,您可以尝试这样的事情:

Cursor oldCursor = yourAdapter.swapCursor(newCursor);

if(oldCursor != null)
oldCursor.close();

请注意,当您使用加载程序 (LoaderManager.LoaderCallbacks) 时,框架将关闭旧游标。这就是documentation说:

onLoadFinished:

The loader will release the data once it knows the application is no longer using it. For example, if the data is a cursor from a CursorLoader, you should not call close() on it yourself. ...

关于android - 使用 rawQuery 和 CursorAdapter 时如何关闭我的 Cursor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24222465/

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