Документы Google указывают, что нельзя использовать первый конструктор CursorAdapters
,
CursorAdapter(Context context, Cursor c)
Есть только два других варианта,
CursorAdapter(Context context, Cursor c, boolean autoRequery)
что говорит
Constructor that allows control over auto-requery. It is recommended you not use this, but instead CursorAdapter(Context, Cursor, int). When using this constructor, FLAG_REGISTER_CONTENT_OBSERVER will always be set.`
и
CursorAdapter(Context context, Cursor c, int flags)`
в котором говорится, что это рекомендуемый конструктор.
Проблема в том, что здесь можно использовать только два флага с последним конструктором,FLAG_AUTO_REQUERY
(целое число 1 )иFLAG_REGISTER_CONTENT_OBSERVER
(число 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
? Цель состоит в том, чтобы не вызывать утечек памяти и быть эффективным.