gpt4 book ai didi

android - 有没有办法防止 ListView 在其适配器的数据更改时滚动到其顶部位置?

转载 作者:IT老高 更新时间:2023-10-28 23:10:07 25 4
gpt4 key购买 nike

在更改适配器的数据时,我在保留 ListView 的滚动位置时遇到了一些麻烦。

我目前正在做的是在一个ListFragment的onCreate中创建一个自定义的ArrayAdapter(带有重写的getView方法),然后将其分配给它的列表:

mListAdapter = new CustomListAdapter(getActivity());
mListAdapter.setNotifyOnChange(false);
setListAdapter(mListAdapter);

然后,当我从定期获取所有内容的加载器接收到新数据时,我会在其 onLoadFinished 回调中执行此操作:

mListAdapter.clear();
mListAdapter.addAll(data.items);
mListAdapter.notifyDataSetChanged();

问题是,调用 clear() 会重置 ListView 的滚动位置。删除该调用会保留位置,但显然会将旧项目留在列表中。

这样做的正确方法是什么?

最佳答案

正如您自己指出的,对“clear()”的调用会导致位置重置为顶部。

摆弄滚动位置等是为了让它工作。

如果您的 CustomListAdapter 是 ArrayAdapter 的子类,这可能是问题所在:

对 clear() 的调用,调用 'notifyDataSetChanged()'。您可以防止这种情况:

mListAdapter.setNotifyOnChange(false); // Prevents 'clear()' from clearing/resetting the listview
mListAdapter.clear();
mListAdapter.addAll(data.items);
// note that a call to notifyDataSetChanged() implicitly sets the setNotifyOnChange back to 'true'!
// That's why the call 'setNotifyOnChange(false) should be called first every time (see call before 'clear()').
mListAdapter.notifyDataSetChanged();

我自己没试过,但试试吧:)

关于android - 有没有办法防止 ListView 在其适配器的数据更改时滚动到其顶部位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14718502/

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