在moveToPosition之后更改了光标数量

时间:2019-03-06 08:37:19

标签: android sqlite

我在使用Sqlite游标的Android中遇到了一个非常奇怪的问题。游标在Activity.onResume中创建,并在内部RecyclerView.Adapter中使用。在适配器的getItemViewType(position)调用中,我调用cursor.moveToPosition(position),然后获取内容以确定哪个视图:

override fun onResume() {
  _cursor = DB.sql().query(....)
  rv.adapter = MyAdapter()
}

inner class MyVH(view:View) : RecyclerView.ViewHolder(view) {
   ...
}

inner class MyAdapter : RecyclerView.Adapter<MyVH>() {
    private val _index_contentType = _cursor!!.getColumnIndex("ContentType")
    override fun getItemCount() = _cursor!!.count
    override fun getItemViewType(position:Int) {
        Log.i(TAG, "getItemViewType with $position and count=${_cursor!!.count}")
        _cursor!!.moveToPosition(position)
        Log.i(TAG, "getItemViewType with $position and count=${_cursor!!.count}")
        val contentType = _cursor.getInt(_index_contentType)
    }
}

我在这一行得到了IndexOutOfBoundaryException:

        val contentType = _cursor.getInt(_index_contentType)

因此,我添加了2条日志以验证原因。和日志打印

getItemViewType with 10 and count=11
getItemViewType with 10 and count=10

如果再次重新查询_cursor更改,我也会打印日志,但是在这种情况下_cursor不会更改。我不为什么_cursor.count可以在moveToPosition中更改,有人可以对此有所了解吗?

0 个答案:

没有答案