AnKo SQLite:从数据库中异步填充listview?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AnKo SQLite:从数据库中异步填充listview?相关的知识,希望对你有一定的参考价值。
我正在尝试将我的应用程序从Java翻译成Kotlin。我正在使用AnKo SQLite管理数据库
除了使用CursorLoaders的listviews之外,一切正常:在使用AnKo SQLite时,我找不到如何替换CursorLoader。 (和expandableListViews一样的问题)
有人可以帮帮我吗?
答案
好的,这是我的解决方案......我不知道它是否是最好的:
- 创建一个扩展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")
...
}
}
如果有更好的解决方案,请告诉我。
希望能有所帮助。
以上是关于AnKo SQLite:从数据库中异步填充listview?的主要内容,如果未能解决你的问题,请参考以下文章
SQLite 的 Recyclerview 第一次显示空白页面
Android 从 SQLite 数据库填充自定义 ListView