2013-09-27 18 views
16

Ich brauche eine Kombination aus Aktionsleiste und Fragmente in einer meiner Android-Anwendungen, die auch Gingerbread zielt. Also habe ich die Aktionsleiste aus der v7-Support-Bibliothek und Fragmente aus der v4-Support-Bibliothek verwendet und meine Klasse mit FragmentActivity erweitert.ActionBar (Unterstützung) mit Fragment (Unterstützung)

bekomme ich einen Fehler, wenn ich die Zeile eingeben aus

actionbar = getSupportActionBar(); 

Der Fehler besagt, dass getSupportActionBar() für den Typ myFragmentClass undefiniert ist (meine Klassennamen). Der Code funktioniert perfekt ohne die Support-Bibliothek. Gibt es eine Lösung für mein Problem?

Danke!

+1

Haben Sie die richtige Bibliothek importiert? android.support.v7.app.ActionBar –

+0

tat ich. Ich habe die Action-Leiste, um auch zu arbeiten. Das Problem entstand, als ich das Fragment einbinden wollte. – Anirudh

Antwort

19

Sie ActionBarActivity statt FragmentActivity erweitern müssen ActionBar mit Fragmenten zu haben.

Wenn Sie die Appcompat-Bibliothek v7 verwenden, sollte Ihre Aktivität stattdessen ActionBarActivity erweitern, eine Unterklasse von FragmentActivity (weitere Informationen finden Sie unter Hinzufügen der Aktionsleiste).

Weitere Informationen finden Sie auf der folgenden Seite. Die obige Zeile wird von der folgenden Seite übernommen (letzter Absatz). http://developer.android.com/training/basics/fragments/creating.html

Bearbeiten - Dies ist kein Fehler. Es ist nur ein Mangel an Wissen. Manchmal sind grundlegende nicht klar. Ich lerne gerade, auch von der Android-Website, und so kann ich Ihnen die Antwort geben.

+1

Ja, ich habe es nach ein paar Tagen funktioniert, indem ich ActionBarActivity erweitert habe. Ich habe nur vergessen, meinen Beitrag zu aktualisieren. Danke für deine Antwort! – Anirudh

1

die ActionBar in einem Fragment zu nennen, verwenden:

actionbar = getActivity().getSupportActionBar(); 

Ein Fragment hat keine ActionBar aber die Aktivität. Deshalb musst du es so nennen.

+0

Ich kann die getActivity() -Option in Eclipse nicht bekommen – Anirudh

+0

Das hat nichts mit Eclipse zu tun. Achten Sie darauf, diese Zeile in einem Fragment zu nennen. –

+0

Die Methode getActivity() ist für die Klasse nicht definiert: Das ist der Fehler, den ich beim Hinzufügen des Codes erhalte. – Anirudh

40

schreiben Dieser Code in OnAttach() Methode:

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

ActionBarActivity veraltet. Verwenden

actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();

+0

Danke für die Antwort. Werde es beim nächsten Mal versuchen. Ich habe bewegt, um Aktionsleiste seit .. – Anirudh

+0

ok .. es wird auf jeden Fall funktionieren .. – bGorle

+0

Das hat gut funktioniert! –

7

hatte ich auch versucht mit:

actionbar = getActivity().getSupportActionBar(); 

und es hat nicht funktioniert, bis ich das tat:

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

So funktionierte es, wenn ich zu meinem MainActivity gegossen.

+0

Verwenden Sie diese Methode nicht, da Fragmente in mehreren Aktivitäten wiederverwendet werden. Wenn Sie das Fragment in einer anderen Aktivität als "MainActivity" verwenden, stürzt es ab. Bhrs Antwort des Castings auf die Superklasse ActionBarActivity ist korrekt. –

+0

Korrigieren. Ich hatte dieses Wissen dann nicht. – Tinashe

0

Ich habe es versucht, durch ActionBarActivity erstreckt, und einige Änderungen in AndroidManifest.xml machen als

<activity android:name="yourActionbarActivity" 

android: theme = "@ style/Theme.AppCompat.Light">

und es funktioniert gut für mich

-3

Kein Bedarf, wo jeder die Änderungen zu tun, verwenden Sie einfach getActionBar().setTitle(title) statt getSupportActionBar wenn Sie FragmentActivity verwenden. Es funktioniert gut für mich.

+0

Es funktioniert nicht auf allen Geräten. Sie benötigen getSupportActionBar(), um Geräte unterhalb von API 11 zu unterstützen. – Anirudh

7

für android.support.v7

ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); 

//than next for example 
actionBar.setDisplayHomeAsUpEnabled(true);