2014-11-22 78 views
6

這個問題在stackoverflow中被問了好幾次,我試過了所有這些。但不幸的是,這兩個都不適合我。getActionBar()。setDisplayHomeAsUpEnabled(true)throws NullPointerException

我試圖在兩個活動之間實現導航,作爲學習Android應用程序開發的一部分。我的minium SDK和目標SDK版本分別是11和21(Android 5)。我在AndroidManifest.xml中的設置如下所示:

<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> 

我有兩個活動:MainActivity和DetailActivity。當我點擊MainActivity中的按鈕時,應用程序成功打開DetailActivity。但是,當我試圖通過使用下面的代碼,以使後退按鈕,它返回一個NullPointerExcepion:

getActionBar().setDisplayHomeAsUpEnabled(true); 

我的兩個類擴展ActionBarActivity。

在MainActivity.java:

public class MainActivity extends ActionBarActivity { 
... 
} 

在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 
} 

我也試圖改變主題。例如,android:theme="@android:style/Theme.Holo.Light"

+0

可能重複的[getActionBar()返回null](http://stackoverflow.com/questions/6867076/getactionbar-returns-null) – SMA 2014-11-22 14:31:51

回答

23

您從ActionBarActivity繼承。因此,您需要使用getSupportActionBar()而不是getActionBar()來獲得appcompat-v7供應的操作欄backport。

2

使用這個..

getSupportActionBar()setDisplayHomeAsUpEnabled(真)。

代替這個 - getActionBar()。setDisplayHomeAsUpEnabled(true);

它會很好地工作。

3

進口V7:

import android.support.v7.app.ActionBar; 

然後在onCreate方法:

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

Summay: 爲了確保你不會得到一個NullPointerException。 您需要:

  1. 將正確的庫目標導入到您的minium SDK版本中。
  2. 正如問題所有者所說的那樣,使用正確的主題。

但在我的情況下,if語句是解決我的應用程序崩潰所必需的。順便說一句,我使用AppCompatActivity來保存我的視圖片段。

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); 
    } 
相關問題