gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:04 24 4
gpt4 key购买 nike

场景如下:我有一个显示 Twitter 提要的简单 ListView。我有一个 CursorAdapter,它正在从 sqlite 中获取推文。当我在我的游标上调用 requery() 时,我希望能够获取已经添加到数据库中的新推文。一切正常,发生这种情况后,新项目甚至在 ListView 中可见。

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

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

我的问题是,如何在调用重新查询时根据光标位置保持相同的滚动位置,以便在此示例中,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 的滚动位置不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14237260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com