removeOnGlobalLayoutListener

removeOnGlobalLayoutListener

我有一些可以使用ViewTreeObserver#removeOnGlobalLayoutListener(...)成功编译的代码,当它运行时,此方法将抛出NoSuchMethodError。为什么?

最佳答案

ViewTreeObserver中有两种名称几乎相同的方法。

removeOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener victim)

(上为,然后为全局)是API 16中添加的一种方法。它替代了

removeGlobalOnLayoutListener(ViewTreeObserver.OnGlobalLayoutListener victim)

(在apit_rstrong上为全局,然后为),该API自API 1起就存在,但现已弃用。

两种方法都可能在编译时出现(如果您针对Jellybean或更高版本进行构建),但是较新的方法将在pre-Jellybean设备上失败。

这段代码阻止了错误:

try {
    thing.removeOnGlobalLayoutListener(victim);
} catch (NoSuchMethodError x) {
    thing.removeGlobalOnLayoutListener(victim);
}

这段代码也是如此:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
    thing.removeGlobalOnLayoutListener(victim);
} else {
    thing.removeOnGlobalLayoutListener(victim);
}

关于android - 为什么removeOnGlobalLayoutListener会引发NoSuchMethodError?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15162821/

10-10 23:29