0

运行以下(注意:目标> 3.0)

ActionBar actionBar = getActionBar();

在版本 < 3.0 (SDK 11) 的 Android 上会生成NoSuchMethodError.

有几种方法可以解决这个问题,包括反射和类延迟加载。但是,以下似乎适用于我测试过的所有设备(2.3.6、3.0、3.1、4.0):

boolean hasActionBar = android.os.Build.VERSION.SDK_INT >= 11;

if (hasActionBar) {
    ActionBar actionBar = getActionBar();
} else {
    // create custom actionbar
}

请注意SDK_INT参数是static final,这似乎是它起作用的原因。

这是处理兼容性的有效方法吗?

4

2 回答 2

2

我相信是的,只要一切设置正确。

来自 Reto Meier 的博客: http ://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html

于 2012-02-07T21:13:25.180 回答
1

由于 JIT 编译器,这看起来很有效。此代码在支持此理论的 SDK < 2.1 上失败。无论如何,这可能不是避免反射的可靠方法。

于 2012-02-08T17:42:51.593 回答