2015-01-17 39 views
6

Hier ist mein Code:Android getActionBar vs getSupportActionBar?

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ 

    //android.support.v7.app.ActionBar actionBar = getSupportActionBar(); 
    //actionBar.setTitle("Android"); 

    ActionBar actionBar = getActionBar(); 
    actionBar.setTitle("Droid"); 
} 

Während der getSupportActionBar() verwendet meine app mit kitkat und anderen neuen Versionen ganz gut läuft, aber getActionBar mit führt zu einem Fehler.

hier Fehler:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.hide()' on a null object reference 
      at com.github.domain.geoquiz.QuizActivity.onCreate(QuizActivity.java:57) 
      at android.app.Activity.performCreate(Activity.java:5933) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
            at android.app.ActivityThread.access$800(ActivityThread.java:144) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5221) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372 

Warum? Von Android-Dokumentationen:

Caution: Be certain you import the ActionBar class (and related APIs) from the appropriate package:

If supporting API levels lower than 11: import android.support.v7.app.ActionBar

If supporting only API level 11 and higher: import android.app.ActionBar

Nun, warum diese App abstürzt?

+0

Wenn Sie die Support-Bibliothek verwenden, sollten Sie die Methode 'getSupportActionBar()' weiterleiten. Welche Android-Version verwendest du zum Testen? – andrew

+0

Kitkat auf meinem Handy. –

Antwort

11

Wenn Sie AppCompat verwenden, müssen Sie immer getSupportActionBar() anrufen, egal welche Android Version Ihre App läuft.

Auf welche Android-Versionen zielen Sie?

Ich würde Ihnen empfehlen, die neue Toolbar anstelle von ActionBar zu verwenden, weil es viel flexibler zu verwenden ist.

+0

Nein, ich verwende AppCompat nicht. Ich teste meine App auf Android 4.4.4. Ich werde in die Toolbar schauen, aber ich möchte Grund für diesen Fehler wissen. –

+0

in Ordnung, wenn Sie die SupportActionBar importieren, müssen Sie immer 'getSupportActionBar() 'aufrufen – carstenbaumhoegger

+0

Ich habe gerade gesehen, dass AppCompat in styles.xml verwendet wird. Also, ist das das Problem? –

2

Wenn Sie AppCompatActivity erweitern, dann bieten Sie Rückwärts-Unterstützung für ältere Android-Versionen und dafür müssen Sie getSupportActionBar() verwenden.

Wenn Sie android.app.ActionBar dann haben Sie importieren getActionBar() verwenden, und wenn Sie android.support.v7.app.ActionBar dann müssen Sie getSupportActionBar() verwenden importieren.

Hinweis: Durch die Verwendung von android.support.v7.app.ActionBar, Sie rückwärts Unterstützung für ältere Android-Versionen zur Verfügung stellen können.

Verwandte Themen