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では動作しません。
getSupportActionBar()
でActionBarActivity
を呼び出す必要があります。 getActionBar()
を呼び出さないでください。これは古いデバイスでは使用できません。また、appcompat-v7
の新しいr21エディションでは、常にnull
新しいActionBarActivity
は、システムアクションバーを無効にして置き換えます。
アクティビティがAppCompatActivityの場合、次のようなアクションバーを取得できます。
Android.support.v7.app.ActionBar mActionBar = getSupportActionBar();
Object actionBar = getSupportActionBar();
Android.support.v7.internal.app.WindowDecorActionBar bar = (Android.support.v7.internal.app.WindowDecorActionBar) actionBar;
21SDKを対象とするアプリを開発しているが、アプリが古いSDKで使用される場合、上記の行が解決策です。
アクティビティがActionBarActivityを拡張する場合、21SDKではgetActionBar()を使用できません
すべてのコードで、ActionBarをAndroid.support.v7.app.ActionBarに置き換えます。また、setSupportActionBar()を使用して、AppCompatActivityからアクティビティをエクステントします。 Android v7依存をサポートします。