ОК, вот мое решение ... Я не знаю, является ли оно лучшим:
- создайте новый класс kotlin "MyCursorLoader", расширяющий CursorLoader
установить основной конструктор следующим образом:
class MyCursorLoader(
mContext: Context,
val mTableName: String,
var mProjection: Array<String>? = null,
var mSelection: String = "1",
var mSelectionArgs: Array<String> = emptyArray(),
var mGroupBy: String = MySqlHelper.ID,
var mHaving: String = "",
var mSortOrder: String = "${MySqlHelper.ID} ASC",
var mLimit: String = "",
var mDistinct: Boolean = true
): CursorLoader(mContext) {
val mObserver: Loader<Cursor>.ForceLoadContentObserver = Loader<Cursor>(mContext).ForceLoadContentObserver()
var mCancellationSignal: CancellationSignal? = null
переопределить метод OnLoadInBackground тем же кодом, что и встроенный, просто заменив val cursor = ContentResolverCompat.query(...
строка с:
val cursor = MySqlHelper.instance.readableDatabase.query(
mDistinct, mTableName, mProjection, mSelection, mSelectionArgs, mGroupBy, mHaving, mSortOrder, mLimit, mCancellationSignal)
Так что нет необходимости заново создавать провайдер данных в манифесте, не нужно иметь дело с Uri ... Я могу использовать MyCursorLoader точно так же, как встроенный CursorLoader, вызывая еговот так:
override fun onCreateLoader(id: Int, args: Bundle?): Loader<Cursor> {
when (id) {
DAY_HEADER_LOADER ->
return MyCursorLoader(mContext, TABLE_EVENTS, arrayOf(ID, DAY), mGroupBy = DAY, mSortOrder = "$DAY DESC")
...
}
}
Дайте мне знать, если это лучшее решение.
Надеюсь, что это может помочь.