我正在尝试将我的应用程序从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
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") ... } }
让我知道是否是一个更好的解决方案 .
希望能有所帮助 .
1 回答
好的,这是我的解决方案......我不知道它是否是最好的:
创建一个扩展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
val cursor = ContentResolverCompat.query(...
行替换为:所以不需要在清单中重新创建数据提供者,不需要处理Uri ...我可以像使用内置的CursorLoader一样使用MyCursorLoader,调用它如下:
让我知道是否是一个更好的解决方案 .
希望能有所帮助 .