AnKo SQLite:从数据库异步填充列表视图?
AnKo SQLite : populate listview asynchronously from database?
我正在尝试将我的应用程序从 Java 翻译成 Kotlin。
我正在使用 AnKo SQLite
管理数据库
除了带有 CursorLoaders 的列表视图外,一切正常:我找不到如何在使用 AnKo SQLite 时替换 CursorLoader。
(和 expandableListViews 一样的问题)
有人可以帮我吗?
好的,这是我的解决方案...我不知道它是否是最好的:
- 创建一个扩展 CursorLoader
的新 kotlin class "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")
...
}
}
让我知道是否有更好的解决方案。
希望能帮到你。
我正在尝试将我的应用程序从 Java 翻译成 Kotlin。 我正在使用 AnKo SQLite
管理数据库除了带有 CursorLoaders 的列表视图外,一切正常:我找不到如何在使用 AnKo SQLite 时替换 CursorLoader。 (和 expandableListViews 一样的问题)
有人可以帮我吗?
好的,这是我的解决方案...我不知道它是否是最好的:
- 创建一个扩展 CursorLoader 的新 kotlin class "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")
...
}
}
让我知道是否有更好的解决方案。
希望能帮到你。