And*_*ndy 13 android android-contentprovider android-loadermanager android-cursorloader android-cursoradapter
谷歌文档指出不使用第CursorAdapters一个构造函数,
CursorAdapter(Context context, Cursor c)
Run Code Online (Sandbox Code Playgroud)
只有两个选项,
CursorAdapter(Context context, Cursor c, boolean autoRequery)
Run Code Online (Sandbox Code Playgroud)
这说
允许控制自动重新查询的构造函数.建议您不要使用它,而是使用CursorAdapter(Context,Cursor,int).使用此构造函数时,将始终设置FLAG_REGISTER_CONTENT_OBSERVER
和
CursorAdapter(Context context, Cursor c, int flags)`
Run Code Online (Sandbox Code Playgroud)
这说它是推荐的构造函数.
问题是这里只有两个标志用于最后一个构造函数,FLAG_AUTO_REQUERY(int 1)和FLAG_REGISTER_CONTENT_OBSERVER(int 2).使用FLAG_AUTO_REQUERY没有意义,因为我现在使用CursorLoader在后台管理它并更新它.有FLAG_REGISTER_CONTENT_OBSERVER,它表示使用时不需要CursorLoader.
现在我问,我通过什么整数CursorAdapter(Context context, Cursor c, int flags)才能使它与我的工作正常CursorAdapter?让我担心的是如何正确管理旧光标.我不确定这样做的正确方法.
如果我使用FLAG_REGISTER_CONTENT_OBSERVER,那么我必须做一些事情onContentChanged(),但swapCursor()在我使用时LoaderManager,由于光标未关闭,我可以做adapter.swapCursor(cursor).close().但会与冲突onContentChanged()的CursorAdapter?目标是不会导致任何内存泄漏并且效率很高.
Ale*_*ood 19
几个星期前我在这个主题上发表了博客...也许阅读它会有所帮助.您还可以考虑阅读开发人员站点上的示例代码.
我应该使用哪种构造函数?
使用CursorAdapter(Context context, Cursor c, int flags)(文档建议在前者上使用此构造函数).
我通过什么整数
CursorAdapter(Context context, Cursor c, int flags).
只需将整数传递给它0.你并不想通过它FLAG_REGISTER_CONTENT_OBSERVER,因为你使用的是CursorLoader与你的CursorAdapter(因为CursorLoader寄存器ContentObserver for you), and you definitely don't want to pass itFLAG_AUTO_REQUERY`由于该标志已被弃用.
令我担心的是如何正确管理旧光标.我不确定这样做的正确方法.
整个问题LoaderManager是它在幕后为你做了所有烦人的光标管理工作.自动加载数据的便利性,而不必担心管理查询的游标,正是旧的startManagingCursor和stopManagingCursor方法被弃用的原因.
......我可以做到
adapter.swapCursor(cursor).close()
不要那样做.在LoaderManager将关闭自身的光标.事实上,如果我没记错的话,如果你试图调用close()光标,就会出错.听起来你不应该重写onContentChanged().
| 归档时间: |
|
| 查看次数: |
7357 次 |
| 最近记录: |