Ich habe ActionBarActivity
mit NavigationDrawer
und benutze support_v7 Toolbar
als ActionBar. In einem meiner Fragmente hat die Symbolleiste eine benutzerdefinierte Ansicht. In anderen Fragmenten Toolbar
sollte Titel angezeigt werden.
Wie bekomme ich eine Toolbar
Instanz zum Anpassen aus Fragmenten? Ich kann ActionBar mit bekommen getActivity().getActionBar()
, aber wenn ich setTitle()
diese Instanz ActionBar aufrufe, tut es nichts.
UPD:
In meinem Fall
((ActionBarActivity) getActivity()).getSupportActionBar().setTitle();
(wie MrEngineer13 sagte) funktioniert bei der ersten Fragmenterstellung nicht, da ich es von onHiddenChanged () aus aufrufe. Jetzt füge ich onCreateView () weitere hinzu und es funktioniert einwandfrei.
Antworten:
Sie müssen Ihre Aktivität von Anfang
getActivity()
anAppCompatActivity
ausführen. Hier ist ein Beispiel:Der Grund, warum Sie es wirken müssen, ist, dass
getActivity()
a zurückgegeben wirdFragmentActivity
und Sie ein benötigenAppCompatActivity
In Kotlin:
quelle
Falls Fragmente eine benutzerdefinierte Ansicht von ToolBar haben sollten, können Sie ToolBar für jedes Fragment separat implementieren.
ToolBar in fragment_layout hinzufügen:
finde es in Fragment:
Der Menü-Listener kann auf zwei Arten erstellt werden: überschreiben Sie onOptionsItemSelected in Ihrem Fragment:
oder legen Sie den Listener für die Symbolleiste fest, wenn Sie diese in onCreateView () erstellen:
quelle
onOptionsItemSelected()
anstelle von Fragmenten zu überschreiben , um Code-Wiederholungen zu vermeiden.Sie haben zwei Möglichkeiten, um die Symbolleiste fragmentiert zu erhalten
Erster
und zweiter
quelle
quelle
Für Kotlin-Benutzer
(activity as AppCompatActivity).supportActionBar?.show()
quelle
!!
ist völlig vermeidbar mit?
und es wird Ihnen einen möglichen Absturz(activity as? AppCompatActivity)?.supportActionBar?.show()
Möglicherweise müssen Sie versuchen,
getActivity().getSupportActionBar().setTitle()
wenn Sie support_v7 verwenden.quelle
Aus Ihrem Fragment: (Symbolleiste aus Fragment holen?)
Dies ist sehr hilfreich, wenn Sie den Spinner in der Symbolleiste verwenden und den Spinner oder benutzerdefinierte Ansichten in der Symbolleiste von einem Fragment aus aufrufen !
Aus Ihrer Tätigkeit:
quelle
In XML
Kotlin: In fragment.kt -> onCreateView ()
-> onCreateOptionsMenu ()
-> onOptionsItemSelected ()
quelle
Ich habe es mit diesen Schritten gemacht.
onCreateView
Hauptfragment ein.MainActivity
(Parent Activity) des Fragments implementiert ist . Selbst wenn Sie eine Schaltfläche oder einen Menüpunkt verwenden, können Sie den Titel von ändernonSelectedItemClickListener
, genau wie in meinem Fall.quelle
Wenn Sie eine benutzerdefinierte Symbolleiste oder Aktionsleiste verwenden und eine Referenz Ihrer Symbolleiste / Aktionsleiste von Fragmenten erhalten möchten, müssen Sie zuerst die Instanz Ihrer Hauptaktivität von der onCreateView- Methode von Fragment wie unten abrufen .
Verwenden Sie dann die Aktivität für die weitere Implementierung wie unten
Bevor Sie dies aufrufen, müssen Sie Ihre benutzerdefinierte Symbolleiste in Ihrer MainActivity wie folgt initialisieren.
Definieren Sie zunächst Ihre öffentliche Symbolleiste wie
und weisen Sie in der onCreate () -Methode die benutzerdefinierte Symbolleisten-ID zu
Das ist es. Es wird in Fragment funktionieren.
quelle