gpt4 book ai didi

android - 从 ViewThreeObserver 移除 OnScrollChangedListener

转载 作者:行者123 更新时间:2023-11-30 02:55:38 26 4
gpt4 key购买 nike

我有这个代码:

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

@Override
public void onScrollChanged() {
if(condition) {
//do something
}
}
});

现在,如果条件得到验证,我将删除观察者的监听器。我试过:

 observer.addOnScrollChangedListener(null);

但是我收到一个错误,声称“ViewThreeObserver 不存在”。这是什么意思,我如何才能正确移除监听器?

最佳答案

observer 是一个长期存在的引用,它不能保证在 View 的生命周期内有效。相反,您可以再次在您的 View 上调用 getViewTreeObserver 并删除监听器(如 Ahmad 所述,使用 removeOnScrollChangedListener)。

my_view.getViewTreeObserver().removeOnScrollChangedListener(this);

虽然这是一个短暂的调用,但它有可能不活跃,因此您可以事先检查它的 isAlive(我自己从未经历过)。

您也可以在 observer 上使用 isAlive 如果您愿意(很可能不会活着)并使用它来移除监听器。如果 observer 不存在,您仍然需要调用 getViewTreeObserver

报价getViewTreeObserver

Returns the ViewTreeObserver for this view's hierarchy. The view tree observer can be used to get notifications when global events, like layout, happen. The returned ViewTreeObserver observer is not guaranteed to remain valid for the lifetime of this View. If the caller of this method keeps a long-lived reference to ViewTreeObserver, it should always check for the return value of isAlive().

我见过很多不同的变体,这里有几个:

关于android - 从 ViewThreeObserver 移除 OnScrollChangedListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23313618/

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