我的问题:每当我通过自定义的SimpleCursorAdapter更新ListView的内容时,它会重置其滚动位置到顶部。我希望ListView在更新时保持其滚动位置。
一开始我是每次创建一个新的适配器实例,并使用ListView.setAdapter(),但根据this discussion所说,我应该更新适配器而不是重置它。但我找不到一种适用于SimpleCursorAdapter的正确方法来做到这一点。
以下是我尝试过的一些方法,省略了方法参数:
- 使用新的游标调用
-
- api 11才有
-
-
-
- 我熟悉
这似乎是一个常见且简单的问题。有人处理过吗?
一开始我是每次创建一个新的适配器实例,并使用ListView.setAdapter(),但根据this discussion所说,我应该更新适配器而不是重置它。但我找不到一种适用于SimpleCursorAdapter的正确方法来做到这一点。
以下是我尝试过的一些方法,省略了方法参数:
- 使用新的游标调用
SimpleCursorAdapter.changeCursorAndColumns()
可以成功更新适配器,但仍会重置滚动位置。-
SimpleCursorAdapter.changeCursor()
的作用方式相同。- api 11才有
SimpleCursorAdapter.swapCursor()
,而我正在开发api 8。-
SimpleCursorAdapter.notifyDataSetChanged()
无法更新ListView。(可能我漏掉了其他步骤。)-
ListView.invalidate()
无法更新ListView。-
SimpleCursorAdapter.requery()
会使ListView变空,并且已被弃用。- 我熟悉
ListView.setSelection()
解决方案,但当更新ListView时,我不希望它移动。这会将其捕捉到列表中的一个位置。这似乎是一个常见且简单的问题。有人处理过吗?