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

添加新项目后调用Requery后,带有CursorAdapter的Android ListView具有错误的滚动位置,第1张

概述这是场景:我有一个简单的ListView显示Twitter提要.我有一个CursorAdapter,它从sqlite获取推文.当我在游标上调用requery()时,我希望将获取新的推文,这些推文已经被添加到数据库中.这一切都很好,在这种情况发生后,新的项目甚至可以在ListView中看到. 问题是滚动位置似乎是根据项目位置偏移量保存的.因此,假设我的ListView中的第一个可见位置是4.当我重新 这是场景:我有一个简单的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);
总结

以上是内存溢出为你收集整理的添加新项目后调用Requery后,带有CursorAdapter的Android ListView具有错误的滚动位置全部内容,希望文章能够帮你解决添加新项目后调用Requery后,带有CursorAdapter的Android ListView具有错误的滚动位置所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1135708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存