AnKo SQLite:从数据库中异步填充listview?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AnKo SQLite:从数据库中异步填充listview?相关的知识,希望对你有一定的参考价值。

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

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

有人可以帮帮我吗?

答案

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

  1. 创建一个扩展CursorLoader的新kotlin类“MyCursorLoader”
  2. 像这样设置主构造函数: 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
  3. 使用与内置代码相同的代码覆盖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")
        ...
        }
    }

如果有更好的解决方案,请告诉我。

希望能有所帮助。

以上是关于AnKo SQLite:从数据库中异步填充listview?的主要内容,如果未能解决你的问题,请参考以下文章

Anko SQLite

SQLite 的 Recyclerview 第一次显示空白页面

如何从GridView项目中删除SQLite数据?

Android 从 SQLite 数据库填充自定义 ListView

使用从 SQLite 概括的数据填充 RecyclerView/ListView

使用 Core Data 一对多关系从 JSON 数组填充 sqlite 数据库