如何(正确)从startManagingCursor转换到CursorLoader?

Dre*_*awk 19 android cursor android-cursorloader

我将我的android更新SDK到最新版本,现在它说startManagingCursor()deprecated.我需要帮助来更新我的代码以使用新代码 CursorLoader.

private void fillData() {
    Cursor notesCursor = mDbHelper.fetchAllNotes();
    startManagingCursor(notesCursor);
    NoteAdapter notes = new NoteAdapter(this,  R.layout.notes_row, notesCursor);
    setListAdapter(notes);
}
Run Code Online (Sandbox Code Playgroud)

那么,startManagingCursor()旧的,如果它被翻译,新代码会是什么样子?

Com*_*are 16

首先,startManagingCursor()仍然有效.它并不理想,因为它在主应用程序线程上执行数据库I/O. 在Android中,"弃用"通常意味着"我们认为我们建议您使用的其他内容更好".因此,如果在应用程序的开发周期中有意义,则应考虑迁移.

其次,正如Selvin所说,SDK只提供了一个Loader实现ContentProvider.我有一个项目Loader直接为SQLite 提供.

第三,你的代码确实没有直接的"翻译".该Loader框架是异步和事件驱动的,而您的代码则不是.

一般来说,你Loader将负责获取笔记,你会填充你ListViewonLoadFinished(),当你交付CursorLoader.

  • @EthanAllen:胡说八道.对于初学者来说,如果你想支持旧设备是不可能的.例如,如果不使用已弃用的方法,则无法创建适用于API级别10及更低级别的"PreferenceActivity".需要根据具体情况考虑弃用警告.*通常*您希望尽可能避免弃用方法.但"从来没有"夸大案件. (23认同)
  • 只是想在这里添加一个想法,如果你正在构建新代码,你绝不应该使用已弃用的API. (2认同)