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 に答える