web-dev-qa-db-ja.com

getActionBar()。setDisplayHomeAsUpEnabled(true);新しいアクティビティの作成時にNullPointerExceptionをスローします(Google-基本チュートリアル)

このチュートリアル をフォローしており、このコードブロックでDisplayMessageActivityのonCreateメソッドでNullPointerExceptionを取得しています。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// Show the Up button in the action bar.
getActionBar().setDisplayHomeAsUpEnabled(true); //Exception here
}

NexusOne AVDテンプレートに従ってエミュレーターでアプリを実行しています。
テキストを入力した状態で送信ボタンをクリックすると、例外が発生します。

ログは次のとおりです。

09-03 23:02:07.586: E/AndroidRuntime(7095): FATAL EXCEPTION: main
09-03 23:02:07.586: E/AndroidRuntime(7095): Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mypackage.myfirstapp/com.mypackage.myfirstapp.DisplayMessageActivity}: Java.lang.NullPointerException
09-03 23:02:07.586: E/AndroidRuntime(7095):     at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2180)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2230)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at Android.app.ActivityThread.access$600(ActivityThread.Java:141)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1234)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at Android.os.Handler.dispatchMessage(Handler.Java:99)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at Android.os.Looper.loop(Looper.Java:137)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at Android.app.ActivityThread.main(ActivityThread.Java:5041)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at Java.lang.reflect.Method.invokeNative(Native Method)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at Java.lang.reflect.Method.invoke(Method.Java:511)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:793)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:560)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at dalvik.system.NativeStart.main(Native Method)
09-03 23:02:07.586: E/AndroidRuntime(7095): Caused by: Java.lang.NullPointerException
09-03 23:02:07.586: E/AndroidRuntime(7095):     at com.mypackage.myfirstapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.Java:40)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at Android.app.Activity.performCreate(Activity.Java:5104)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1080)
09-03 23:02:07.586: E/AndroidRuntime(7095):     at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2144)
09-03 23:02:07.586: E/AndroidRuntime(7095):     ... 11 more

このブロックにコメントすることで、アプリは正常に実行されます。

NullPointerExceptionがスローされるのはなぜですか?

20
Chris

getActionBar()getSupportActionBar()または((ActionBarActivity)getActivity()).getSupportActionBar()に変更してみてください。

30
ewige

ActionBarをサポートしていないテーマを使用している可能性があります。したがって、getActionBar()メソッドはNullPointerExceptionをスローします。

このテーマを使用してみてください:

Android:theme="@Android:style/Theme.Holo.Light"
30

同じ問題がありました。

マニフェストのアクティビティで私は宣言しました

Android:theme="@Android:style/Theme.Black.NoTitleBar

エラーが発生しました。この行を削除した後、アクションバーは正常に機能しました。

10
Petr

必要ではありませんが、APIレベル14以降でも、APIバージョン間でいくつかの動作の不一致があります。

動作:

戻る「<」画像が表示されますが、押すと機能しません。バックイベントを処理するために、スイッチケースの実装に使用することをお勧めします。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case Android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

それは私のために働いた。

4
Handrey

Android開発者サイトで利用可能なナビゲーションドロワーサンプルアプリを試してみたときに、このエラーが発生しました。MainActivityActionBarActivityを拡張しませんでした。したがって、getActionBar()はnullを返し、例外が発生します。

1
irs8925

他の答えはどれも私にとってはうまくいきませんでした。 if全体をコメントアウトしただけで機能しました。メソッド名( およびドキュメント )から、とにかく(必要でない限り)その機能は必要ないので、害はありません。

関連するドキュメントの抜粋:

ホームを「アップ」アフォーダンスとして表示するかどうかを設定します。 「ホーム」を選択すると、トップレベルまたはフロントページに戻るのではなく、UIで1レベルずつ戻る場合は、これをtrueに設定します。

複数の表示オプションを一度に設定するには、setDisplayOptionsメソッドを参照してください。

パラメータ

showHomeAsUp trueは、ホームを選択すると、アプリのトップレベルではなく1レベル上に戻ることをユーザーに示します。

0
marcelocra

アクションバーと互換性のないアクティビティでテーマを設定する必要があります。

テーマを確認で使用しているマニフェストファイルと削除

またはカスタムテーマを定義している場合res-> values-> style.xmlに移動してWindowActionBar to true。を作成します

0
Vivek