Estoy usando el nuevo android.support.design.widget.BottomNavigationView
de la biblioteca de soporte. ¿Cómo puedo configurar la selección actual del código? Me di cuenta de que la selección se cambia de nuevo al primer elemento, después de girar la pantalla. Por supuesto, también ayudaría, si alguien pudiera decirme, cómo "guardar" el estado actual del BottomNavigationView
en la onPause
función y cómo restaurarlo onResume
.
¡Gracias!
android
bottomnavigationview
Miguel
fuente
fuente
BottomNavigationView
no guarda ningún estado interno. Probablemente espere que esto se incluya en una actualización futura. Duplicar (con más información) aquí: stackoverflow.com/questions/40236786/…Respuestas:
Desde la API 25.3.0 se introdujo el método
setSelectedItemId(int id)
que le permite marcar un elemento como seleccionado como si se hubiera tocado.De los documentos:
Ejemplo de código:
IMPORTANTE
Usted DEBE ya ha añadido todos los artículos al menú (en caso de que hace esto mediante programación) y establecer el oyente antes de llamar setSelectedItemId (creo que desea que el código en su oyente a ejecutar cuando se llama a este método). Si llama a setSelectedItemId antes de agregar los elementos del menú y configurar el oyente, no sucederá nada.
fuente
onTabSelected
obviamente, no hará nada. Lea los documentos -> Establezca el ID del elemento de menú seleccionado. Esto se comporta de la misma manera que tocar un elemento. Es de desarrolladores de AndroidPara hacer clic mediante programación en el elemento BottomNavigationBar, necesita usar:
Esto organiza todos los elementos con sus etiquetas correctamente.
fuente
Para aquellos que todavía usan SupportLibrary <25.3.0
No estoy seguro de si esta es una respuesta completa a esta pregunta, pero mi problema era muy similar: tuve que procesar la
back
presión del botón y llevar al usuario a la pestaña anterior donde estaba. Entonces, tal vez mi solución sea útil para alguien:Por favor, tenga en cuenta que si el usuario presiona otra pestaña de navegación
BottomNavigationView
, no se borrará el elemento seleccionado actualmente, por lo que debe llamar a este métodoonNavigationItemSelected
después del procesamiento de la acción de navegación:Con respecto al ahorro del estado de la instancia, creo que podría jugar con la misma
action id
vista de navegación y encontrar una solución adecuada.fuente
Menu menu = bottomNavigationView.getMenu();
devuelve una copia del menú, por lo que elbottomNavigationView
objeto no se ve afectado?donde
action_item1
es el ID del elemento del menú.fuente
fuente
Ahora es posible desde la versión 25.3.0 llamar a
setSelectedItemId()
\ o /fuente
Agregar
android:enabled="true"
a elementos de BottomNavigationMenu.Y luego configúrelo
bottomNavigationView.setOnNavigationItemSelectedListener(mListener)
y configúrelo como seleccionado haciendobottomNavigationView.selectedItemId = R.id.your_menu_id
fuente
Esto probablemente se agregará en próximas actualizaciones. Pero mientras tanto, para lograr esto puedes usar la reflexión.
Cree una vista personalizada que se extienda desde BottomNavigationView y acceda a algunos de sus campos.
Y luego úselo en su archivo de diseño xml.
fuente
Simplemente agregando otra forma de realizar una selección programáticamente: esta es probablemente la intención en primer lugar o tal vez se agregó más adelante.
La
performIdentifierAction
toma unMenu
ID de artículo y una bandera.Consulte la documentación para obtener más información.
fuente
Parece estar arreglado en SupportLibrary 25.1.0 :) Editar: Parece arreglado, que el estado de la selección se guarda, al rotar la pantalla.
fuente
Por encima de API 25 puede usar setSelectedItemId (menu_item_id) pero bajo API 25 debe hacerlo de manera diferente, el menú de usuario para obtener el control y luego establecerChecked en un elemento específico marcado
fuente
Use esto para configurar el elemento de menú de navegación inferior seleccionado por ID de menú
fuente
No quieres modificar tu código. Si es así, te recomendé que probaras BottomNavigationViewEx。
Solo necesitas reemplazar llamar a un método
setCurrentItem(index);
ygetCurrentItem()
。fuente
utilizar
fuente
Le hice un error a Google sobre el hecho de que no hay una forma confiable de seleccionar la página en un BottomNavigationView: https://code.google.com/p/android/issues/detail?id=233697
NavigationView aparentemente tenía un problema similar, que solucionaron agregando un nuevo método setCheckedItem ().
fuente
Puede probar el método performClick:
fuente
El único "inconveniente" de la solución es el uso
MenuItemImpl
, que es "interno" a la biblioteca (aunque público).fuente
SI NECESITA APROBAR DINÁMICAMENTE ARGUMENTOS DE FRAGMENTO HAGA ESTO
Hay muchas respuestas (en su mayoría repetidas o desactualizadas) aquí, pero ninguna de ellas maneja una necesidad muy común: pasar dinámicamente diferentes argumentos al Fragmento cargado en una pestaña .
No puede pasar dinámicamente diferentes argumentos al Fragmento cargado usando
setSelectedItemId(R.id.second_tab)
, que termina llamando a staticOnNavigationItemSelectedListener
. Para superar esta limitación, terminé haciendo esto en miMainActivity
que contiene las pestañas:El
ArticleFragment.newInstance()
método se implementa como de costumbre:fuente
espero que esto ayude
Se trata más de determinar el fragmento predeterminado cargado al mismo tiempo con el elemento del menú de navegación inferior correspondiente. Puede incluir lo mismo en sus devoluciones de llamada OnResume
fuente
Este método funciona para mí.
fuente
La reflexión es mala idea.
Dirígete a esta esencia . Hay un método que realiza la selección pero también invoca la devolución de llamada:
fuente
callOnClick()
lugar deperformClick()
, de esta manera no necesito deshabilitar el sonido, que deperformClick()
todos modos no funcionó .