Mam ActionBarActivity
z NavigationDrawer
i wykorzystanie support_v7 Toolbar
jak ActionBar. W jednym z moich fragmentów pasek narzędzi ma niestandardowy widok. W pozostałych fragmentach Toolbar
powinien pokazać tytuł.
Jak uzyskać Toolbar
instancję dostosowywania z fragmentów? Mogę uzyskać ActionBar za pomocą getActivity().getActionBar()
, ale jeśli setTitle()
wywołam dla tej instancji ActionBar, nic nie zrobi.
UPD:
W moim przypadku
((ActionBarActivity) getActivity()).getSupportActionBar().setTitle();
(jak powiedział MrEngineer13) nie działają na początku tworzenia fragmentów, ponieważ wywołuję to z onHiddenChanged (). Teraz dodaję więcej do onCreateView () i działa dobrze.
Odpowiedzi:
Trzeba rzucić swoją aktywność od
getActivity()
doAppCompatActivity
pierwszego. Oto przykład:Powodem, dla którego musisz go rzucić, jest to, że
getActivity()
zwraca aFragmentActivity
i potrzebujesz plikuAppCompatActivity
W Kotlinie:
źródło
W przypadku, gdy fragmenty powinny mieć niestandardowy widok ToolBar, możesz zaimplementować ToolBar dla każdego fragmentu osobno.
dodaj ToolBar do fragment_layout:
znajdź to we fragmencie:
listener menu można stworzyć na dwa sposoby: override onOptionsItemSelected w twoim fragmencie:
lub ustaw nasłuchiwanie paska narzędzi podczas tworzenia go w onCreateView ():
źródło
onOptionsItemSelected()
zamiast fragmentów, aby uniknąć powtarzania kodu.Masz dwie możliwości, aby uzyskać fragment paska narzędzi
Pierwszy
i drugi
źródło
źródło
Dla użytkowników Kotlin
(activity as AppCompatActivity).supportActionBar?.show()
źródło
!!
jest całkowicie możliwe do uniknięcia dzięki?
i zaoszczędzi ci możliwej awarii(activity as? AppCompatActivity)?.supportActionBar?.show()
Może musisz spróbować,
getActivity().getSupportActionBar().setTitle()
jeśli używasz support_v7.źródło
Z Twojego fragmentu: (pobrać pasek narzędzi z fragmentu?)
jest to bardzo pomocne, gdy używasz pokrętła na pasku narzędzi i wywołujesz pokrętło lub niestandardowe widoki w pasku narzędzi z fragmentu!
Z Twojej aktywności:
źródło
W XML
Kotlin: We fragment.kt -> onCreateView ()
-> onCreateOptionsMenu ()
-> onOptionsItemSelected ()
źródło
Zrobiłem to, wykonując te czynności.
onCreateView
głównym fragmencie.MainActivity
(Parent Activity) fragmentu. Nawet jeśli używasz dowolnego przycisku lub pozycji menu, możesz zmienić tytuł zonSelectedItemClickListener
, tak jak zrobiłem w moim przypadku.źródło
jeśli używasz niestandardowego paska narzędzi lub paska akcji i chcesz uzyskać odniesienie do paska narzędzi / paska akcji z fragmentów, musisz najpierw pobrać wystąpienie głównego działania z metody onCreateView fragmentu, jak poniżej.
następnie użyj aktywności do dalszej implementacji, jak poniżej
Przed wywołaniem tego, musisz zainicjować niestandardowy pasek narzędzi w MainActivity, jak poniżej.
Pierwszy zestaw definiuje publiczny pasek narzędzi, taki jak
iw metodzie onCreate () przypisz niestandardowy identyfikator paska narzędzi
Otóż to. Będzie działać we fragmencie.
źródło