Android ListView - 更新时滚动回到顶部

标签 android android-listview android-ui android-adapter

我有一个 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/

相关文章:

Android 谷歌地图 ListView 与 onClickListener()

android - 布局加载缓慢

adb - Keyevent 点击 Android 屏幕的 Alert Dialog

android - 如何在android studio中实现水平评分条形图?

安卓 : SEND_SMS Permission not listed for tablet

android - 在混合应用程序 [onsen ui] 中启用选择和复制

android - Flutter : No valid Android SDK platforms found in/usr/lib/android-sdk/platforms. 目录为空

java - 安卓资源$NotFoundException : Resource ID #0x0

android - ScrollView 内不可滚动的 ListView

android - 在 TextView 中更改不同字符的大小,Android