首页 文章

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

提问于
浏览
0

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

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

有人可以帮帮我吗?

1 回答

  • 0

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

    • 创建一个扩展CursorLoader的新kotlin类"MyCursorLoader"

    • 设置主要构造函数如下:

    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 ...我可以像使用内置的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")
            ...
            }
        }
    

    让我知道是否是一个更好的解决方案 .

    希望能有所帮助 .

相关问题