gpt4 book ai didi

android - 实现 onScrollListener 来检测 ListView 中滚动的结束

转载 作者:IT王子 更新时间:2023-10-28 23:56:15 24 4
gpt4 key购买 nike

我有一个显示一些项目的 ListView。我想对当前显示在 ListView 可见部分的项目执行一些操作,具体取决于 ListView 的滚动方式;因此我想实现 ListViewOnScrollListener。根据 Android api 引用,onScroll 方法“将在滚动完成后调用”。在我看来,这正是我所需要的,因为一旦滚动完成,我就会在 ListView 上执行我的操作(onScroll 方法返回显示的第一个项目的索引和显示的项目数)。

但是一旦实现,我从 LogCat 中看到,onScroll 方法不仅会在滚动完成后触发,而且会针对进入显示 View 的每个新项目触发,从开始到滚动结束。这不是我期望也不是我需要的行为。监听器的另一个方法(onScrollStateChanged),相反,不提供关于当前显示在 ListView 中的项目的信息。

那么,有谁知道如何使用这两种方法来检测滚动的结束并获取有关显示项目的信息? api 引用和方法的实际行为之间的不一致让我有点困惑。提前致谢。

P.S.:我见过一些类似的话题,但没有什么能帮助我理解整个事情是如何运作的......!

最佳答案

最后,我找到了一个不太优雅但对我有用的解决方案;发现滚动的每一步都会调用 onScroll 方法,而不是仅在滚动结束时调用,并且实际上仅在滚动完成时才调用 onScrollStateChanged,我做了这样的事情:

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
this.currentFirstVisibleItem = firstVisibleItem;
this.currentVisibleItemCount = visibleItemCount;
}

public void onScrollStateChanged(AbsListView view, int scrollState) {
this.currentScrollState = scrollState;
this.isScrollCompleted();
}

private void isScrollCompleted() {
if (this.currentVisibleItemCount > 0 && this.currentScrollState == SCROLL_STATE_IDLE) {
/*** In this way I detect if there's been a scroll which has completed ***/
/*** do the work! ***/
}
}

实际上,每次滚动 ListView 时,我都会保存有关第一个可见项和可见项计数的数据(onScroll 方法);当滚动状态发生变化时(onScrollStateChanged),我保存状态并调用另一个方法,该方法实际上了解是否存在滚动以及是否已完成。通过这种方式,我也有关于我需要的可见项目的数据。也许不干净但有效!

问候

关于android - 实现 onScrollListener 来检测 ListView 中滚动的结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6358428/

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