【问题标题】:Inserting rows in ListView without moving the screen in Android [duplicate]在ListView中插入行而不在Android中移动屏幕[重复]
【发布时间】:2014-08-15 14:52:28
【问题描述】:
我有一个 ListView 显示特定类别中的所有内容,以及一个从 Web 服务器提取数据的服务。我正在呈现大量数据,如果我重新提取数据,请将其提供给适配器并通知数据更改,整个列表视图将被刷新。一方面没有问题,但我希望用户保持他留在屏幕上的相同位置。
是否可以保持相同的偏移量或在表格中仅插入 1 行而不将屏幕移动到列表顶部?
【问题讨论】:
标签:
android
listview
android-listview
【解决方案1】:
您需要维护两个变量,一个用于当前选定的索引,第二个用于列表视图顶部的选定项目的顶部位置。
int listSelectedIndex,top;
使用以下方法保存当前列表位置。您应该在通知数据更改之前调用此方法。
private void saveListPosition() {
listSelectedIndex = listView.getFirstVisiblePosition();
View v = lstQuoteProducts.getChildAt(0);
top = (v == null) ? 0 : v.getTop();
}
通知数据更改后调用以下方法重置列表的保存位置。
listView.setSelectionFromTop(listSelectedIndex, top);