繁体   English   中英

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

[英]Android ListView with CursorAdapter has Incorrect Scroll Position after Requery is called when new items are added

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

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

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

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

我的一个项目中有类似的问题。 这是我解决它的方式。 虽然情况并非完全相同。 希望能帮助到你。

在更新列表之前,以这种方式保存滚动位置 -

int position = getListView().getFirstVisiblePosition();
View v = getListView().getChildAt(0);
int top = v == null ? 0 : v.getTop();

然后在更新列表后,您将知道已添加的项目数。 所以你可以打电话

yourlistview.setSelectionFromTop(position + <number of items added>, top);

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

Psuedo Code

on_update

  offset+= (list_view.length() - list_size)
  list_size = list_view.length()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM