2014-11-22 14 views
6

To pytanie jest zadawane kilka razy w stackoverflow i próbowałem ich wszystkich. Ale niestety nic nie działa dla mnie.getActionBar(). SetDisplayHomeAsUpEnabled (true) zgłasza NullPointerException

Próbuję wdrożyć nawigację między dwiema czynnościami, w ramach uczenia się rozwoju aplikacji na Androida. Moje minium SDK i docelowe wersje SDK to odpowiednio 11 i 21 (Android 5). Moje ustawienia w AndroidManifest.xml są pokazane poniżej:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.navigation" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="11" 
     android:targetSdkVersion="21" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".DetailActivity" >  
     </activity> 
    </application> 
</manifest> 

Mam dwie aktywności: MainActivity and DetailActivity. Kiedy klikam przycisk w MainActivity, aplikacja pomyślnie otwiera DetailActivity. Ale gdy próbuję włączyć przycisk z powrotem za pomocą następującego kodu zwraca NullPointerExcepion:

getActionBar().setDisplayHomeAsUpEnabled(true); 

Moje obie klasy przedłużyć ActionBarActivity.

W MainActivity.java:

public class MainActivity extends ActionBarActivity { 
... 
} 

W DetailActivity.java:

public class DetailActivity extends ActionBarActivity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_detail); 

     getActionBar().setDisplayHomeAsUpEnabled(true); // returns null pointer 
} 

Próbowałem również zmianę tematów. Na przykład android:theme="@android:style/Theme.Holo.Light".

+0

możliwe duplikat [getActionBar() zwraca null] (http://stackoverflow.com/questions/6867076/getactionbar-returns-null) – SMA

Odpowiedz

23

Odziedziczyli Państwo po ActionBarActivity. W związku z tym należy użyć getSupportActionBar(), a nie getActionBar(), aby uzyskać dostęp do pasma działań paska appcompat-v7.

2

Służy ..

getSupportActionBar() setDisplayHomeAsUpEnabled (prawda.);

zamiast tego - getActionBar(). SetDisplayHomeAsUpEnabled (true);

będzie działać idealnie.

3

import v7:

import android.support.v7.app.ActionBar; 

następnie w metodzie onCreate:

ActionBar actionBar = getSupportActionBar(); 
actionBar.setDisplayHomeAsUpEnabled(true); 
0

Summay: Aby upewnić się, że nie dostanie NullPointerException. Musisz:

  1. Zaimportuj właściwy cel biblioteki do wersji mini SDK.
  2. Używaj właściwych motywów, tak jak powiedział właściciel pytania.

Ale w mojej sytuacji stwierdzenie, że jest konieczne, aby rozwiązać moją aplikację przed awarią. Przy okazji używam AppCompatActivity do przechowywania fragmentu widoku.

public onCreateView(LayoutInflater inflater, final ViewGroup container,Bundle savedInstanceState){ 
    View view = inflater.inflate(R.layout.list_fragment, container, false); 
    ActionBar actionBar = getActivity().getActionBar(); 
    if (actionBar != null){ 
     actionBar.setDisplayHomeAsUpEnabled(true); 
    } 
Powiązane problemy