我有一些可以使用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/