web-dev-qa-db-ja.com

getActionBar()はNullを返します(AppCompat-v7 21)

AppCompat-v7を21.0.0に変更して問題なくコンパイルした後、実行するとすぐにアプリがクラッシュします。

それは私にエラーを与えます:

Java.lang.NullPointerException: Attempt to invoke virtual method 'void Android.app.ActionBar.setIcon(int)' on a null object reference

この行に:

getActionBar().setIcon(R.drawable.ic_action_bar);

AppCompat-v7 20.0.0では動作しますが、21.0.0では動作しません。

43
user3184899

getSupportActionBar()ActionBarActivity を呼び出す必要があります。 getActionBar()を呼び出さないでください。これは古いデバイスでは使用できません。また、appcompat-v7の新しいr21エディションでは、常にnull新しいActionBarActivityは、システムアクションバーを無効にして置き換えます。

85
CommonsWare

アクティビティがAppCompatActivityの場合、次のようなアクションバーを取得できます。

Android.support.v7.app.ActionBar mActionBar = getSupportActionBar();
10
Ivo Stoyanov
Object actionBar = getSupportActionBar();

Android.support.v7.internal.app.WindowDecorActionBar bar = (Android.support.v7.internal.app.WindowDecorActionBar) actionBar;

21SDKを対象とするアプリを開発しているが、アプリが古いSDKで使用される場合、上記の行が解決策です。

アクティビティがActionBarActivityを拡張する場合、21SDKではgetActionBar()を使用できません

2
kamilws

すべてのコードで、ActionBarをAndroid.support.v7.app.ActionBarに置き換えます。また、setSupportActionBar()を使用して、AppCompatActivityからアクティビティをエクステントします。 Android v7依存をサポートします。

0
Imran Khan