getSupportActionBar aus dem inneren des Fragments ActionBarCompat
Fange ich ein neues Projekt mit der AppCompat/ActionBarCompat
im v7
support library. Ich versuche, herauszufinden, wie die getSupportActionBar
aus einem fragment. Meine Tätigkeit, dass die Gastgeber das fragment erstreckt sich ActionBarActivity
aber ich sehe nicht, dass eine ähnliche Unterstützung Klasse für Fragmente.
Aus meiner fragment
public class CrimeFragment extends Fragment {
//...
getActivity().getSupportActionBar().setSubtitle(R.string.subtitle); //getSupportActionBar is not defined in the v4 version of Fragment
//...
}
Die google-Seite für die Verwendung (http://android-developers.blogspot.in/2013/08/actionbarcompat-and-io-2013-app-source.html) sagt, es sollten keine Veränderungen für die v4
fragment. Muss ich die Darsteller alle meine getActivity()
Anrufe an eine ActionBarActivity
? Das scheint wie schlechtes design.
InformationsquelleAutor der Frage Paul | 2013-08-19
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach Fragment.onActivityCreated(...) Sie haben eine gültige Aktivität zugänglich über getActivity().
Müssen Sie es umwandeln, um eine ActionBarActivity dann machen Sie den Anruf zu getSupportActionBar().
Benötigen Sie den cast. Es ist nicht ein schlechtes design, es ist abwärtskompatibel.
InformationsquelleAutor der Antwort Pierre-Antoine LaFayette
Während diese Frage hat zu einer akzeptierten Antwort schon, ich muss darauf hinweisen, dass es nicht ganz richtig: Aufruf
getSupportActionBar()
ausFragment.onAttach()
verursachenNullPointerException
wenn die Aktivität gedreht wird.Kurze Antwort:
Verwenden
((ActionBarActivity)getActivity()).getSupportActionBar()
imonActivityCreated()
(oder jeder Punkt, der später in seinem Lebenszyklus) stattonAttach()
.Lange Antwort:
Der Grund dafür ist, dass, wenn ein
ActionBarActivity
ist neu, nach dem drehen, es wird wieder alle Fragmente vor wirklich dasActionBar
Objekt.Source-code für
ActionBarActivity
imsupport-v7
Bibliothek:ActionBarActivityDelegate.createDelegate()
schafft diemImpl
Objekt je nach Android-version.super.onCreate()
istFragmentActivity.onCreate()
was wieder alle vorherigen Fragmente, die nach einer rotation (FragmentManagerImpl.dispatchCreate()
&c).mImpl.onCreate(savedInstanceState)
istActionBarActivityDelegate.onCreate()
liest diemHasActionBar
variable aus dem Fenster Stil.mHasActionBar
ist wahr,getSupportActionBar()
immer wiedernull
.Quelle für
ActionBarActivityDelegate.getSupportActionBar()
:InformationsquelleAutor der Antwort matiash
Wenn jemand com, verwendet.android.support:appcompat-v7: und AppCompatActivity als Aktivität dann funktioniert das
InformationsquelleAutor der Antwort Amir
in Ihrem
fragment.xml
hinzufügenToolbar
Tag von der Unterstützung der BibliothekNun, wie wir es kontrollieren können aus
MyFragment
Klasse? mal sehen,innen
onCreateView
Funktion fügen Sie die folgendenund wenn Sie hinzufügen möchten
items
um die Symbolleiste innerhalbMyFragment
Sie
must
fügen Sie die folgende Zeile innerhalbonCreateView
Funktiondiese Zeile ist wichtig, wenn Sie es vergessen haben, android wird nicht füllen Sie Ihre Menüpunkte.
davon ausgehen, erkennen wir Sie in
menu/fragment_menu.xml
danach überschreiben Sie die folgenden Funktionen
hoffe, das hilft
InformationsquelleAutor der Antwort Basheer AL-MOMANI
Als eine aktualisierte Antwort für Pierre-Antoine LaFayette Antwort
ActionBarActivity ist veraltet; verwenden Sie
AppCompatActivity
stattInformationsquelleAutor der Antwort Dasser Basyouni