2014-10-23 22 views
6

Po zaktualizowaniu zestawu SDK systemu Android do wersji 5.0 metoda getActionBar() zaczęła zwracać wartość null, powodując awarię mojej aplikacji podczas uruchamiania. Nie mam bladego pojęcia, co powoduje ten problem, a wszelkie istniejące wątki Stackoverflow nie pomogły.Funkcja getActionBar() zwraca wartość null po aktualizacji pakietu SDK do wersji 5.0

Tu jest mój manifest:

<application 
    android:name="App" 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/ActionBarTheme" > 

styles.xml:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light"></style> 
<!-- Application theme. --> 
<style name="AppTheme" parent="AppBaseTheme"></style> 
<style name="ListItemPadding"> 
    <item name="android:paddingTop">8dp</item> 
    <item name="android:paddingRight">5dp</item> 
    <item name="android:paddingBottom">8dp</item> 
    <item name="android:paddingLeft">5dp</item> 
</style> 

themes.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android"> 

<!-- the theme applied to the application or activity --> 
<style name="ActionBarTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> 
    <item name="android:actionBarStyle">@style/ActionBar</item> 
    <item name="android:actionOverflowButtonStyle">@style/OverflowButton</item> 
    <!-- Support library compatibility --> 
    <item name="actionBarStyle">@style/ActionBar</item> 
    <item name="actionOverflowButtonStyle">@style/OverflowButton</item> 
</style> 

<style name="OverflowButton" parent="android:style/Widget.Holo.ActionButton.Overflow"> 
    <item name="android:src">@drawable/menu</item> 
</style> 

<!-- ActionBar styles --> 
<style name="ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse"> 
    <item name="android:background">@color/main</item> 

    <!-- Support library compatibility --> 
    <item name="background">@color/main</item> 
</style> 

</resources> 

i moi Gradle Zależności:

dependencies { 
compile 'com.github.jenzz.undobar:library:1.1:[email protected]' 
compile 'com.android.support:support-v4:21.0.0' 
compile 'com.android.support:appcompat-v7:21.0.0' 
compile 'com.loopj.android:android-async-http:1.4.5' 
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3' 
compile 'com.google.android.gms:play-services:6.1.+' 
} 

Każda pomoc jest bardzo doceniana!

+1

'getActionBar()' jakiej klasy? pochodzące od 'ActionBarActivity'? wtedy używasz niewłaściwej metody (powinieneś użyć 'getSupportActionBar()') – Selvin

+0

@Selvin To moja własna klasa, która rozszerza działanie. To jest linia, która powoduje awarię działania: 'getActionBar(). SetDisplayHomeAsUpEnabled (false)' i po usunięciu tej linii aplikacja uruchamia się, ale bez paska akcji. – bodyflex

+0

do czego służy funkcja com.android.support:appcompat-v7:21.0.0 'for? – pskink

Odpowiedz

16

Użyj getSupportActionBar(), gdy używasz ActionBarActivity i appcompat-v7, jak wydajesz się tutaj robić.

+0

Mimo to użycie "ActionBarActivity". To prosta "Aktywność" i działała dobrze, zanim zaktualizowałem ją do najnowszego zestawu SDK. – bodyflex

+1

@maxh: Następnie pozbądź się 'appcompat-v7' i przejdź do motywu systemu Android, z dala od' Theme.AppCompat'. – CommonsWare

+0

Dziękujemy! To rozwiązało problem. Strage, które wcześniej działało. Ale teraz po usunięciu biblioteki appcompat znów działa. – bodyflex

0

Natknąłem się na to sam. Nie używanie AppCompat może nie zawsze być rozwiązaniem, szczególnie jeśli zamierzasz z niego korzystać. Dlatego też, w przypadku korzystania AppCompatActivity, spróbuj włożyć to w layout.xml:

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:layout_alignParentTop="true" 
    android:background="?attr/colorPrimary"/> 

Następnie można użyć getSupportActionBar().