AnKo SQLite:从数据库异步填充列表视图?

AnKo SQLite : populate listview asynchronously from database?

我正在尝试将我的应用程序从 Java 翻译成 Kotlin。 我正在使用 AnKo SQLite

管理数据库

除了带有 CursorLoaders 的列表视图外,一切正常:我找不到如何在使用 AnKo SQLite 时替换 CursorLoader。 (和 expandableListViews 一样的问题)

有人可以帮我吗?

好的,这是我的解决方案...我不知道它是否是最好的:

  1. 创建一个扩展 CursorLoader
  2. 的新 kotlin class "MyCursorLoader"
  3. 像这样设置主构造函数:

    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

  4. 使用与内置代码相同的代码覆盖 OnLoadInBackground 方法,只需将 val cursor = ContentResolverCompat.query(... 行替换为 :

    val cursor = MySqlHelper.instance.readableDatabase.query(
        mDistinct, mTableName, mProjection, mSelection, mSelectionArgs, mGroupBy, mHaving, mSortOrder, mLimit, mCancellationSignal)
    

因此无需在清单中重新创建数据提供程序,无需处理 Uri 的...我可以像使用内置 CursorLoader 一样使用 MyCursorLoader,这样调用它:

    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")
        ...
        }
    }

让我知道是否有更好的解决方案。

希望能帮到你。