Ich möchte meine Symbolleiste als Aktionsleiste einrichten. Da es sich bei Ihrer Symbolleiste jedoch um ein Layoutelement handelt, muss es sich in Ihrem Layout befinden. Jetzt ist mein Layout in meinem Fragment.
Ich habe die Symbolleiste in mein Layout eingefügt und nenne sie in meinem Fragment:
//Toolbar
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
Es funktioniert, weil ich den Titel usw. setzen kann, aber jetzt möchte ich, dass es als Aktionsleiste reagiert, weil ich dies eigentlich haben möchte. setDisplayHomeAsUpEnabled (true)
Dazu muss ich die Symbolleiste in eine Aktionsleiste ändern:
setSupportActionBar(toolbar);
Das funktioniert in meinem Fragment nicht ...
Kann mir jemand helfen, meine Symbolleiste als Aktionsleiste in einem Fragment zu verwenden.
Nun ist ActionBarActivity
so veraltet. Sie müssen Ihre Aktivität zuerst von getActivity()
in AppCompatActivity
umwandeln. Hier ist ein Beispiel:
((AppCompatActivity) getActivity()).getSupportActionBar().setSubtitle();
Der Grund dafür, dass Sie es einsetzen müssen, ist, dass getActivity()
eine FragmentActivity
zurückgibt und Sie eine AppCompatActivity
versuchen:
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
ActionBar ist eine Aktivitätseigenschaft. Wenn Sie eine Symbolleiste aus einem bestimmten Fragment als ActionBar der besitzenden Activity festlegen möchten, rufen Sie die Activity ab, zu der das Fragment gehört (Fragment.getActivity()
), und legen Sie deren ActionBar-Eigenschaft fest.
Verwenden Sie dann dieselbe setDisplayHomeAsUpEnabled-Methode, die Sie anfangs in der ActionBar angegeben haben, nachdem Sie Ihre Symbolleiste als ActionBar festgelegt haben, um die Zurück/Hoch-Schaltfläche zu erhalten.
Sie müssen dies natürlich sorgfältig verwalten, wenn Ihre App mehrere Fragmente in dieser Aktivität enthält.
Benutzen
((ActionBarActivity) getActivity()).getSupportActionBar().setSubtitle("Your Title");
Wenn Sie Kotlin verwenden, versuchen Sie Folgendes:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, state: Bundle?): View? {
(activity as AppCompatActivity).setSupportActionBar(your_toolbar)
setHasOptionsMenu(true)
return inflater.inflate(R.layout.your_layout, container, false)
}
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
inflater?.inflate(R.menu.your_menu, menu)
}
Nehmen wir an, die Aktivität, die das Fragment enthält, ist MainActivity.
Tun
MainActivity main = (MainActivity)getActivity();
//You can access all public variable and methods of MainActivity.
//simply call
main.setSupportActionBar(toolbar)
main.getSupportActionBar.setTitle("title");