2012-04-05 19 views
24

Aufruf getActionBar gibt null zurück. Dies wurde häufig gemeldet, daher habe ich darauf geachtet, die von anderen verwendeten Lösungen zu verwenden: Meine minSdkVersion=11, ich habe eine Titelleiste, und ich rufe getActionBar nach setContentView. Außerdem ist meine Aktivität keine Kinderaktivität.getActionBar gibt null zurück

setContentView(R.layout.main); 

// experiment with the ActionBar 
ActionBar actionBar = getActionBar(); 
actionBar.hide(); 

Gerät ist ein Samsung Galaxy Tab 10.1 für alle Ideen und Anregungen Android 3.2

Vielen Dank im Voraus läuft!

+0

Siehe auch basiert: http://stackoverflow.com/questions/6867076/getactionbar-returns-null – Harvey

Antwort

60

Es scheint, dass Sie eine Aktionsleiste (! = Titelleiste) anfordern müssen, entweder über ein Theme oder über den unten stehenden Code.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // The Action Bar is a window feature. The feature must be requested 
    // before setting a content view. Normally this is set automatically 
    // by your Activity's theme in your manifest. The provided system 
    // theme Theme.WithActionBar enables this for you. Use it as you would 
    // use Theme.NoTitleBar. You can add an Action Bar to your own themes 
    // by adding the element <item name="android:windowActionBar">true</item> 
    // to your style definition. 
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 

    setContentView(R.layout.main); 

    // experiment with the ActionBar 
    ActionBar actionBar = getActionBar(); 
    actionBar.hide(); 
} 

-Code aus [here]

+0

Danke. Ich dachte, ich hätte bereits eine Aktionsleiste, aber was ich tatsächlich hatte, war eine "Systemleiste" – user316117

8

Aktionsleiste benötigt Thema oder eine Aktivität mit App Titel dort zu sein. Stellen Sie sicher, dass Sie Ihre Anwendung oder Aktivität nicht als Theme.NOTITLE formatiert haben.

<application 
    android:name="com.xxx.yyy.Application" 
    android:debuggable="false" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code 


<activity 
     android:name="com.xxx.yyy.Activity" 
     android:configChanges="orientation|keyboardHidden|screenSize" 
     android:theme="@style/Theme.NoTitle" // remove this line if you have this in your code 
     android:windowSoftInputMode="adjustResize|stateHidden" > 
1

Die wirkliche Antwort sollte sowohl Kombination von @zapl und @Himanshu Virmani

Für Android Manifest sein:

<application 
    android:name="com.xxx.yyy.Application" 
    android:debuggable="false" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code 


<activity 
     android:name="com.xxx.yyy.Activity" 
     android:configChanges="orientation|keyboardHidden|screenSize" 
     android:theme="@style/Theme.NoTitle" // remove this line if you have this in your code 
     android:windowSoftInputMode="adjustResize|stateHidden" > 

Für Aktivität:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // The Action Bar is a window feature. The feature must be requested 
    // before setting a content view. Normally this is set automatically 
    // by your Activity's theme in your manifest. The provided system 
    // theme Theme.WithActionBar enables this for you. Use it as you would 
    // use Theme.NoTitleBar. You can add an Action Bar to your own themes 
    // by adding the element <item name="android:windowActionBar">true</item> 
    // to your style definition. 
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 
    setContentView(R.layout.activity_main); 
    // Hide the status bar for Android 4.1 and higher 
    View decorView = getWindow().getDecorView(); 
    // Hide the status bar. 
    int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; 
    decorView.setSystemUiVisibility(uiOptions); 
    // Remember that you should never show the action bar if the 
    // status bar is hidden, so hide that too if necessary. 
    ActionBar actionBar = getActionBar(); 
    actionBar.hide(); 
} 
+0

Für mich war die Antwort, den requestFeature-Aufruf über die setContentView zu verschieben, danke! – Rickard

2

Wenn Sie ein erstellen Anwendungsprojekt für API14 oder höher, wird es einen Wert-14-Ordner geben. Stellen Sie sicher, dass Ordner vorhanden ist und es hat eine styles.xml Datei mit:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
     <!-- API 14 theme customizations can go here. --> 
</style> 

ich diesen Fehler bekommen, weil ich ein neues Projekt erstellt, und ich wollte keine zusätzlichen Werte Ordner in meinem Projekt, so dass ich nur gehalten der Werte-Ordner und entfernt die Werte -V11 und Werte -V14-Ordner. Aber anscheinend erfordert das Standardthema für API14 und höher eine ActionBar im übergeordneten XML-Tag, wenn Sie die ActionBar verwenden möchten. Also nahm ich an, ich könnte das falsch machen! Hoffe das hilft jemandem. Am ehesten lösen Sie Ihre Probleme mit den obigen Antworten.

4

Ich habe versucht, die ActionBar aus einem Fragment innerhalb einer ActionBarActivity mithilfe der Support-Bibliothek zu erhalten. Ich hatte dies zu tun:

ActionBarActivity actionBarActivity = (ActionBarActivity)getActivity(); 
ActionBar actionBar = actionBarActivity.getSupportActionBar(); 

Meine nächste Suche ist es, herauszufinden, wie die generische zu machen. Zum Beispiel fühlt sich dieser Code schmutzig an, da er von meinem Fragment wissen muss, dass es von einer ActionBarActivity verwendet wird und die Support-Bibliothek verwendet. Ich denke, es sollte eine Methode sein, die getActivity().getActionBar() zuerst überprüft, gefolgt von dem obigen Code abfangen der ClassCastException, wenn die übergeordnete Aktivität keine ActionBarActivity ist.

+0

Nur diese Antwort funktioniert für mich. Selbst wenn ich ActionBarActivity erweitert habe, gibt getActionBar() null zurück :( – Vivek

11

Es scheint, dass mehrere Bedingungen erfüllt sein müssen, damit dies funktioniert. Der, der mich für eine lange Zeit ratlos war, war dies:

Stellen Sie sicher, dass Ihre Aktivität Aktivität (NOT ActionBarActivity) erweitert.

public class MagicActivity extends Activity 

Stellen Sie sicher, Ihre App-Manifest so etwas wie

<application 
    ... 
    android:theme="@android:style/Theme.Holo" > 

und stellen Sie sicher, dass Ihre Aktivität Layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    .... 
    android:theme="@android:style/Theme.WithActionBar" > 

-Mark

1

Stellen Sie sicher, erweitern ACTIONBARACTIVITY und nicht ACTIVITY hat Dies sollte Ihr Problem lösen

9

Ich schien alle meine Fehler zu lösen, indem ich getActionBar() mit getSupportActionBar(). Ich habe verschiedene Themen ausprobiert und getWindow() hinzugefügt. RequestFeature (Window.FEATURE_ACTION_BAR);, stellte sicher, dass setContentView (view) zuerst und all die anderen Dinge, die vorher gesehen wurden.

+0

Funktioniert perfekt! Danke – user2235615

1

nur zwei Sache ändern 1) Manifest-Datei bearbeiten android: theme = "@ android: style/Theme.Holo">

2) Fragment-Datei hinzufügen android: theme = "@ android: style/Theme.WithActionBar“

1

ändern der Reihenfolge der Systemanfrage:

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 

    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main); 

    // experiment with the ActionBar 
    ActionBar actionBar = getActionBar(); 
    actionBar.hide(); 
} 
0

im Fall, wenn Sie eine Anwendung entwickeln, die sdk Targeting> = 14, und Sie erweitern AppCompat-Material Thema in früheren versio zu unterstützen ns auch. Wenn Sie die Objekte wie die Zurück-Schaltfläche in der Aktionsleiste ausblenden möchten, müssen Sie Folgendes tun: In Ihrer Aktivität (nicht in der Fragmentklasse) Wenn Sie getActionBar() verwenden, wird null zurückgegeben. Wie im Appsupport-Thema getSupportAcionBar() gibt die Aktionsleiste zurück.

Hier ist der Link, wenn Sie von DevByte

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_detail); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(false); 




} 
3

Dieses festen mein Problem folgen mögen:

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

vielleicht Stil Ihre Aktivität der NoActionBar