从 NestedScrollView 中删除 OnScrollChangeListener

Posted

技术标签:

【中文标题】从 NestedScrollView 中删除 OnScrollChangeListener【英文标题】:Remove OnScrollChangeListener from NestedScrollView 【发布时间】:2021-05-15 13:31:38 【问题描述】:

我有一个NestedScrollView,我正在使用以下方法观察它的滚动事件:

val scrollListener = NestedScrollView.OnScrollChangeListener  _, _, scrollY, _, _ ->
    Log.d(TAG, "scrollListener: Scrolled! $scrollY")
    setNavBarVisibilityFor(offset = scrollY)

scrollView.setOnScrollChangeListener(scrollListener)

但是,根据异步事件,我可能需要也可能不需要在该滚动侦听器中调用另一个方法。在 80% 的情况下,我不需要额外的调用,所以我不想在每次触发滚动侦听器时添加一个 bool 来检查,并据此决定方法调用。

我正在尝试从我的NestedScrollView 中删除附加的滚动侦听器并创建并附加一个新侦听器:

val extraScrollListener = NestedScrollView.OnScrollChangeListener  _, _, scrollY, _, _ ->
    Log.d(TAG, "extraScrollListener: Scrolled! $scrollY")
    setNavBarVisibilityFor(offset = scrollY)
    anotherMethodThatNeedsToBeRun(offset = scrollY)

//TODO: Remove the original scrollListener from the scrollView
scrollView.setOnScrollChangeListener(extraScrollListener)

如何在附加新的之前从我的滚动视图中删除原来的NestedScrollView.OnScrollChangeListener

【问题讨论】:

您是否尝试设置 null 以摆脱 OnScrollChangeListener?这适用于由“set....”分配的其他几个侦听器 感谢您的评论!事实证明,即使调用scrollView.setOnScrollChangeListener(extraScrollListener) 也会用新的滚动侦听器替换旧的滚动侦听器,或者@BömachtBlau 建议的null。我昨天可能太累了,没有意识到我的 Log 语句来自哪里。 【参考方案1】:

在 Kotlin 中,您会遇到歧义错误。所以,在那种情况下你需要使用这行代码:

mScrollView.setOnScrollChangeListener(null as NestedScrollView.OnScrollChangeListener?)

【讨论】:

以上是关于从 NestedScrollView 中删除 OnScrollChangeListener的主要内容,如果未能解决你的问题,请参考以下文章

NestedScrollView顶部滑动

当尝试从带有点击事件的视图滚动时,滚动在 NestedScrollView 中不起作用

NestedScrollView 没有在 AlertDialog 内扩展高度

android MD进阶[四] NestedScrollView 从源码到实战..

NestedScrollView 内的回收器视图导致滚动从中间开始

Ruby on Rails - 从数组中删除某些内容