添加新项目后调用Requery后,带有CursorAdapter的Android ListView具有不正确的滚动位置

Red*_*dth 7 android xamarin.android android-listview android-cursoradapter

这是场景:我有一个简单的ListView显示Twitter提要.我有一个CursorAdapter,它从sqlite中获取推文.当我在光标上调用requery()时,我希望将获取新的推文,这些推文已经被添加到数据库中.这一切都很好,在这种情况发生后,新的项目甚至可以在ListView中看到.

问题是滚动位置似乎是根据项目位置偏移量保存的.因此,假设我的ListView中的第一个可见位置是4.当我重新查询并且将2个新项目添加到列表顶部时,ListView将第一个可见项目滚动位置保持为4,但是因为列表中有两个新项目,我现在在第4位看到与我刷新之前不同的项目.此图像说明了之前和之后: 在此输入图像描述

请注意Before,Tweet D是第一个可见项目,之后,Tweet B现在成为第一个可见项目.

我的问题是,在调用requery时如何根据光标位置保持相同的滚动位置,这样在这个例子中,Tweet D仍然是重新查询后的第一个可见项?

hdo*_*ost 0

我的建议是跟踪列表中的项目数量。一旦您知道这一点,作为更新的一部分,您可以添加旧计数和新计数之间的差异。

伪代码

更新时

  offset+= (list_view.length() - list_size)
  list_size = list_view.length()
Run Code Online (Sandbox Code Playgroud)