Anko + Content Provider,不更新有关更改的数据

时间:2017-04-26 08:11:34

标签: android android-contentprovider kotlin android-contentresolver anko

我有一个奇怪的问题,我一起使用 Anko 和Android的内容提供商,我使用LoaderCallbacks<Cursor>实现了我的片段,并且第一次加载数据时我的fun onLoadFinished(loader: Loader<Cursor>?, data: Cursor?) {}被调用并将数据加载到 RecyclerView 中,但当我尝试更新记录时,一切正常,直到没有调用onLoadFinished()!

1 个答案:

答案 0 :(得分:0)

我花了一天时间才发现使用将光标映射到对象的 Anko的Parser 是个问题:

fun <T: Any> Cursor.parseList(parser: RowParser<T>): List<T> = AnkoInternals.useCursor(this) {
val list = ArrayList<T>(count)
moveToFirst()
while (!isAfterLast) {
    list.add(parser.parseRow(readColumnsArray(this)))
    moveToNext()
}
return list

}

长话短说:当用户点击 Recyclerview 项时,我会使用适配器中的光标并将其移动到当前位置然后我尝试使用以下方法将光标映射到我的模型:

val cursor = mAdapter?.cursor
    cursor?.moveToPosition(it)
    Observable.defer {
      val uploadingItem = cursor?.parseList(UploadParser())
      if (uploadingItem == null) {
        Exceptions.propagate(IllegalArgumentException())
      }
      Observable.just(UploadInfoArgs.parseUploading(uploadingItem?.get(it)!!))
    }.subscribeOn(Schedulers.immediate()).observeOn(AndroidSchedulers.mainThread())

游标?.parseList(UploadParser())是我的列表在更改后无法更新的问题!