Używam nowego android.support.design.widget.BottomNavigationView
z biblioteki wsparcia. Jak mogę ustawić aktualny wybór z kodu? Zdałem sobie sprawę, że po obróceniu ekranu następuje zmiana wyboru z powrotem na pierwszą pozycję. Oczywiście, że może przyczynić się również, czy ktoś może mi powiedzieć, jak do „Zapisz” aktualnego stanu BottomNavigationView
w onPause
funkcji i jak przywrócić go onResume
.
Dzięki!
android
bottomnavigationview
Michael
źródło
źródło
BottomNavigationView
nie wykonuje żadnego wewnętrznego zapisywania stanu. Prawdopodobnie spodziewaj się, że zostanie to uwzględnione w przyszłej aktualizacji. Duplikat (z dodatkowymi informacjami) tutaj: stackoverflow.com/questions/40236786/…Odpowiedzi:
Od API 25.3.0 została wprowadzona metoda,
setSelectedItemId(int id)
która pozwala oznaczyć element jako wybrany tak, jakby był dotknięty.Z dokumentów:
Przykład kodu:
WAŻNY
Państwo musi już dodane wszystkie elementy do menu (w przypadku, gdy to zrobić programowo) i ustaw Listener przed wywołaniem setSelectedItemId (wierzę chcesz kod w swoim słuchacza do uruchomienia po wywołaniu tej metody). Jeśli wywołasz setSelectedItemId przed dodaniem elementów menu i ustawieniem słuchacza, nic się nie stanie.
źródło
onTabSelected
oczywiście nic nie da. Przeczytaj dokumentację -> Ustaw identyfikator wybranego elementu menu. Działa to tak samo, jak stuknięcie w element. Pochodzi od programistów AndroidaAby programowo kliknąć element BottomNavigationBar, którego potrzebujesz:
Spowoduje to prawidłowe ułożenie wszystkich elementów wraz z ich etykietami.
źródło
Dla tych, którzy nadal używają SupportLibrary <25.3.0
Nie jestem pewien, czy to pełna odpowiedź na to pytanie, ale mój problem był bardzo podobny - musiałem przetworzyć
back
naciśnięcie przycisku i przenieść użytkownika do poprzedniej zakładki, w której się znajdował. Więc może moje rozwiązanie przyda się komuś:Pamiętaj, że jeśli użytkownik naciśnie inną zakładkę nawigacji
BottomNavigationView
nie wyczyści aktualnie wybranej pozycji, musisz wywołać tę metodę w swojejonNavigationItemSelected
akcji nawigacyjnej po przetworzeniu:Jeśli chodzi o zapisywanie stanu instancji, myślę, że możesz pobawić się tym samym
action id
widokiem nawigacji i znaleźć odpowiednie rozwiązanie.źródło
Menu menu = bottomNavigationView.getMenu();
zwraca kopii menu, więcbottomNavigationView
obiekt nie jest dotknięty?gdzie
action_item1
jest identyfikator pozycji menu.źródło
źródło
Od wersji 25.3.0 można teraz wywołać
setSelectedItemId()
\ o /źródło
Add
android:enabled="true"
to BottomNavigationMenu Items.A następnie ustaw
bottomNavigationView.setOnNavigationItemSelectedListener(mListener)
i ustaw jako wybrany, wykonującbottomNavigationView.selectedItemId = R.id.your_menu_id
źródło
Prawdopodobnie zostanie to dodane w nadchodzących aktualizacjach. Ale w międzyczasie, aby to osiągnąć, możesz użyć refleksji.
Utwórz widok niestandardowy rozszerzający się z BottomNavigationView i uzyskaj dostęp do niektórych jego pól.
A następnie użyj go w pliku układu XML.
źródło
Po prostu dodanie innego sposobu programowego przeprowadzenia selekcji - prawdopodobnie taki był zamiar na początku, a może został dodany później.
performIdentifierAction
ZajmujeMenu
identyfikator elementu i flagę.Więcej informacji można znaleźć w dokumentacji .
źródło
Wydaje się, że zostało to naprawione w SupportLibrary 25.1.0 :) Edycja: Wydaje się, że naprawiono, że stan zaznaczenia jest zapisywany podczas obracania ekranu.
źródło
Powyżej API 25 możesz użyć setSelectedItemId (menu_item_id), ale pod API 25 musisz zrobić inaczej, menu użytkownika, aby uzyskać uchwyt, a następnie ustawić Checked na zaznaczony konkretny element
źródło
Użyj tego, aby ustawić wybraną dolną pozycję menu nawigacji według identyfikatora menu
źródło
Nie chcesz modyfikować swojego kodu. Jeśli tak, polecam wypróbowanie BottomNavigationViewEx。
Wystarczy wymienić wywołanie metody
setCurrentItem(index);
igetCurrentItem()
。źródło
posługiwać się
źródło
Zrobiłem w Google błąd dotyczący faktu, że nie ma niezawodnego sposobu na wybranie strony w widoku BottomNavigationView: https://code.google.com/p/android/issues/detail?id=233697
NavigationView najwyraźniej miał podobny problem, który naprawiono, dodając nową metodę setCheckedItem ().
źródło
Możesz wypróbować metodę performClick:
źródło
Jedynym „minusem” rozwiązania jest użycie
MenuItemImpl
, które jest „wewnętrzne” dla biblioteki (choć publicznej).źródło
JEŚLI TRZEBA DYNAMICZNIE PRZEJŚĆ ARGUMENTY FRAGUMENTÓW, ZRÓB TO
Jest tu wiele (w większości powtarzających się lub nieaktualnych) odpowiedzi, ale żadna z nich nie spełnia bardzo częstej potrzeby: dynamicznego przekazywania różnych argumentów do fragmentu załadowanego do karty .
Nie można dynamicznie przekazywać różnych argumentów do załadowanego fragmentu przy użyciu
setSelectedItemId(R.id.second_tab)
, co kończy się wywołaniem staticOnNavigationItemSelectedListener
. Aby przezwyciężyć to ograniczenie, zrobiłem to w moim,MainActivity
który zawiera karty:ArticleFragment.newInstance()
Metoda jest realizowane jak zwykle:źródło
mam nadzieję, że to pomoże
Chodzi raczej o określenie domyślnego fragmentu załadowanego w tym samym czasie z odpowiednią dolną pozycją menu nawigacji. Możesz dołączyć to samo do swoich wywołań zwrotnych OnResume
źródło
Ta metoda działa dla mnie.
źródło
Odbicie to zły pomysł.
Przejdź do sedna . Istnieje metoda, która dokonuje wyboru, ale również wywołuje wywołanie zwrotne:
źródło
callOnClick()
zamiastperformClick()
, w ten sposób nie muszę wyłączać dźwięku, który i tak nie działałperformClick()
.