使用rawQuery和CursorAdapter时如何关闭Cursor

Bal*_*nam 1 android android-custom-view android-listview android-cursor

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

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

如果关闭DB类中的此光标,则无法从适配器访问它们。

感谢您的时间和精力为我提供帮助。

编辑以添加一些代码片段以更好地理解

这是我的活动代码:

calAdapter = new CalendarListAdapter(context, dbHelper.getAllCalendars());
drawerList.setAdapter(calAdapter);
Run Code Online (Sandbox Code Playgroud)

这是我的光标

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;
    }
Run Code Online (Sandbox Code Playgroud)

ILo*_*cho 5

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

Cursor oldCursor = yourAdapter.swapCursor(newCursor);

if(oldCursor != null)
    oldCursor.close();
Run Code Online (Sandbox Code Playgroud)

请注意,在使用加载程序(LoaderManager.LoaderCallbacks)时,框架将关闭旧游标。这就是文档所说的:

onLoadFinished:

一旦知道应用程序不再使用它,加载程序就会释放数据。例如,如果数据是来自CursorLoader的游标,则不应自己对其调用close()。...