Android 从视图中删除OnScrollChangedListener

Android 从视图中删除OnScrollChangedListener,android,listener,Android,Listener,我有以下代码: ViewThreeObserver observer = my_view.getViewTreeObserver(); observer.addOnScrollChangedListener(new OnScrollChangedListener() { @Override public void onScrollChanged() { if(condition) { //do something } } });

我有以下代码:

ViewThreeObserver observer = my_view.getViewTreeObserver();
observer.addOnScrollChangedListener(new OnScrollChangedListener() {

    @Override
public void onScrollChanged() {
        if(condition) {
        //do something
        }
    }
});
现在,若条件得到验证,我将删除观察器上的侦听器。 我试过:

 observer.addOnScrollChangedListener(null);
但我得到一个错误,声称“ViewThreeObserver不存在”。这意味着什么,以及如何正确删除侦听器?

使用而不是将侦听器设置为null

我收到一个错误,声称“ViewThreeObserver未激活”


建议您在删除侦听器之前检查
ViewTreeObserver
是否处于活动状态

observer
是一个长期引用,不能保证在视图的生命周期内有效。相反,您可以在视图上再次调用
getViewTreeObserver
,然后删除侦听器(使用Ahmad提到的removeOnScrollChangedListener)

虽然这是一个短暂的呼叫,但它可能不存在,因此您可以事先检查它是否存在(我自己从未经历过)

如果您想(很可能不会处于活动状态),也可以在
observer
上使用
isAlive
,并使用它删除侦听器。如果
observer
未处于活动状态,您仍需要调用
getViewTreeObserver

报价

返回此视图层次结构的ViewTreeObserver。视图树 observer可用于在全局事件发生时获取通知,如 布局,发生。返回的ViewTreeObserver观察者不可用 保证在此视图的生存期内保持有效。如果 此方法的调用方保留对的长期引用 ViewTreeObserver,它应该始终检查 isAlive()

我已经看到了许多不同的变化,这里有一些:

my_view.getViewTreeObserver().removeOnScrollChangedListener(this);