我有一个 ListView ,它根据请求添加额外的 View ,由 BaseAdapter 维护。更新后如何保持滚动位置?
我知道这个问题已经被问过几次了,但是每次都提出了相同的解决方案,我已经尝试过了,就是在更新包含列表内容的 ArrayList。
如何确保保持滚动位置?
最佳答案
在您的 Activity 类中实现 OnScrollListener
,然后使用以下代码:
int currentFirstVisibleItem, currentVisibleItemCount, currentTotalItemCount;
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
this.currentFirstVisibleItem = firstVisibleItem;
this.currentVisibleItemCount = visibleItemCount;
this.currentTotalItemCount = totalItemCount;
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
this.currentScrollState = scrollState;
this.isScrollCompleted();
}
private void isScrollCompleted() {
if (currentFirstVisibleItem + currentVisibleItemCount >= currentTotalItemCount) {
if (this.currentVisibleItemCount > 0
&& this.currentScrollState == SCROLL_STATE_IDLE) {
//Do your work
}
}
}
如果您使用 AsyncTask
更新数据,则可以在 PostExecute()
中包含以下内容以保持滚动位置:
list.setAdapter(adapter);
list.setSelectionFromTop(currentFirstVisibleItem, 0);
希望对您有所帮助。
关于Android ListView - 更新时滚动回到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11877848/