2014-10-18 18 views
41

Moja aplikacja ulega awarii w chwili uruchomienia po zmianie AppCompat-v7 na 21.0.0 i skompilowana bez problemu.getActionBar() zwraca Null (AppCompat-v7 21)

To daje mi błąd:

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

na tej linii:

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

Współpracuje z AppCompat-v7 20.0.0, ale nie z 21.0.0.

Odpowiedz

81

Należy zadzwonić pod numer getSupportActionBar() on an ActionBarActivity. Nie dzwoń pod numer getActionBar() - który nie jest dostępny na starszych urządzeniach i dla nowej wersji r21 appcompat-v7, oczekiwałbym, że cały czas będzie zwracał null, ponieważ nowy ActionBarActivity wyłącza i zastępuje pasek akcji systemu.

+0

oprócz tego, trzeba upewnić się, że pasek narzędzi jest dodany do naszego układu i dzwonisz 'setSupportActionBar (yourToolBar)' – Ankit

+0

Nie ma getSupportActionBar w moim ActionBarActivity – Roel

+0

@DalvikVM: Nie powinno być: http: // developer .android.com/reference/android/support/v7/app/ActionBarActivity.html # getSupportActionBar% 28% 29 – CommonsWare

2
Object actionBar = getSupportActionBar(); 

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

Jeśli tworzysz aplikację 21SDK, ale aplikacja będzie używana pod starszymi sdk, to powyższe linie są rozwiązaniem.

Nie można używać getActionBar() pod 21SDK gdy aktywność rozciąga ActionBarActivity

9

Jeśli działalność jest AppCompatActivity, można uzyskać pasek działań takiego:

android.support.v7.app.ActionBar mActionBar = getSupportActionBar(); 
0

Wymień ActionBar przez android. support.v7.app.ActionBar we wszystkich twoich kodach. i użyj setSupportActionBar() również Rozszerz swoją aktywność z AppCompatActivity. korzystaj z zależności od androida v7.

Powiązane problemy