Establecer el índice/id del elemento seleccionado inicialmente en BottomNavigationView

4 minutos de lectura

Avatar de usuario de UneXp
UneXp

he implementado Vista de navegación inferior y no tengo idea de cómo establecer el índice de selección o MenuItem id (en mi caso, el elemento intermedio debe seleccionarse de forma predeterminada).

Me temo que no existe tal posibilidad por ahora, ya que todavía está demasiado crudo, pero de todos modos, cualquier ayuda será apreciada. ¡Gracias!

  • Consulte este enlace. androidgifts.com/…

    – Jigar Shej

    25 de octubre de 2016 a las 9:58

  • si lo se Barra inferior pero no puedo creer que support.design’s one no tenga la posibilidad de seleccionar elementos mediante programación 🙂 Tal vez algunas soluciones pirateadas …

    – UneXp

    25 de octubre de 2016 a las 10:06

  • Mira esta respuesta. Esta es la mejor solución.

    – Volodymyr Yatsykiv

    13 dic 2016 a las 14:50

  • Se agregó una respuesta más “elegante”, puede verificar esa.

    – Jan Slominsky

    14 de enero de 2017 a las 18:08

Establezca el ID del elemento de menú seleccionado usando setSelectedItemId:

bottomNavigationView.setSelectedItemId(R.id.item_id);

Este método comenzó a estar disponible en la Biblioteca de soporte de Android 25.3.0.

  • O use la sintaxis de acceso a la propiedad en Kotlin: bottomNavigationView.selectedItemId = R.id.item_id

    – joseluisq

    23 de agosto a las 20:46

Avatar de usuario de UneXp
UneXp

La única solución que funcionó para mí es:

View view = bottomNavigationView.findViewById(R.id.menu_action_dashboard);
view.performClick();

Simplemente haciendo clic hace el truco. Espero que obtengamos métodos/propiedades adicionales en futuras versiones.

UPD:

Como mencionó el usuario 5968678, se agregó un nuevo método desde la Biblioteca de soporte de Android v25.3.0:

bottomNavigationView.setSelectedItemId(R.id.item_id);

así que usa esto en su lugar 🙂

  • La mejor solución todavía

    – Hombre malo

    13 de diciembre de 2016 a las 21:54

Creo que esta solución puede ser un poco más elegante que la respuesta aceptada:

bottomNavigationView.getMenu().getItem(menuItemIndex).setChecked(true)

donde menuItemIndex es el índice del elemento seleccionado.

  • No funciona. Si tiene la animación habilitada en su bottomNavigationBar, puede ver que el color ha cambiado en el elemento seleccionado, pero la animación aún está en el primer elemento del menú. No disponible por ahora en la biblioteca de Android. SI DESEA HACER QUE FUNCIONE DE TODOS MODOS: ((BottomNavigationMenuView) bottomNavigationView.getChildAt(0)).getChildAt(menuItemIndex).performClick(); O AÚN MEJOR: ((BottomNavigationMenuView) bottomNavigationView.getChildAt(0)).findViewById(R.id.id_menu_action).performClick();

    – Anne-Claire

    30 de enero de 2017 a las 16:43


  • ¿Puedes publicar tu código? Estoy usando el último BottomNavigationView de la biblioteca de soporte de Google (25.1.0) y cuando cambio el índice seleccionado, la animación funciona sin problemas.

    – Jan Slominsky

    31 de enero de 2017 a las 9:30

  • esto solo activará el menú, pero no activará el menú en sí, que es lo que estoy buscando

    – Irfandi D. Vendy

    23 de julio de 2019 a las 16:54

avatar de usuario de arekolek
arekolek

Esto es lo que la documentación dice al respecto:

Los elementos del menú también se pueden usar para seleccionar mediante programación qué destino está actualmente activo. Se puede hacer usando MenuItem#setChecked(true)

Como alternativa a lo que publicó Jan, también puede encontrar el artículo por id:

Menu menu = findViewById(R.id.navigation).getMenu();
menu.findItem(R.id.navigation_home).setChecked(true);

Además, en general, puedo recomendar llamar .callOnClick() en vez de .performClick().

Si está utilizando un oyente, como la implementación predeterminada en el estudio de Android, intente esto:

BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
Integer indexItem = 4;
navigation.getMenu().getItem(indexItem).setChecked(true);
mOnNavigationItemSelectedListener.onNavigationItemSelected(navigation.getMenu().getItem(indexItem));

Avatar de usuario de Mbanda
Mbanda

Creo que la pregunta en este contexto se está viendo en diferentes contextos según las respuestas aquí. De acuerdo con la evaluación, lo que se requiere es la capacidad de concentrarse en BottomNavigationView elemento (definitivamente en una nueva clase que contiene diferentes fragmentos).

Ahora, puede hacer clic en BottomNavigationView OR Buttons o Anything para iniciar una nueva actividad en la intención: –
es decir

Intent intent = new Intent(getActivity(), New_Activity.class);
    intent.putExtra("EXTRA_PAGE, 1);
    startActivityForResult(intent, 30);

Después
-en nuestra New_Activity, recibimos la intención-

Intención intención = getIntent(); página int = intent.getExtras().getInt(“EXTRA_PAGE);

Luego recorremos la variable de página para encontrar el número/índice para el cual se refleja el BottomNavigationView actual, ENTONCES configuramos nuestro elemento de menú de enfoque (asumiendo que su BottomNavigationView tiene elemento de menú para su visualización)

     if(page == 1) {
         currentselect = new Pending();
            bottomNavigationView.getMenu().getItem(0).setChecked(true);
}

Esto responde a la pregunta anterior. El resto del cambio de Fragmento se maneja bien por la cantidad de publicaciones anteriores al invocar:

bottomNavigationView.setOnNavigationItemSelectedListener(navListener);

Entonces algo como:

   private BottomNavigationView.OnNavigationItemSelectedListener navListener =
        new BottomNavigationView.OnNavigationItemSelectedListener(){
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                Fragment selectedFrag = null;
                switch (item.getItemId()) {
                    case R.id.pending:
                        selectedFrag = new Pending();
                        break;
                    case R.id.onTransmit:
                        selectedFrag = new inTransmit();
                        break;
                    case R.id.complete:
                        selectedFrag = new Complete();
                        break;
                }

                getSupportFragmentManager().beginTransaction().replace(R.id.select_field, selectedFrag).commit();

                return true;
            }
        };

NOTA:
Usando Vista de navegación inferior y ContentFrameLayoutContentFrameLayout es tan económico y reducirá su código a más del 50 % a diferencia de usar gustos de Ver paginador y Tablayout

Avatar de usuario de Hamed Jaliliani
Hamed Jaliliani

Código Kotlin para el elemento seleccionado inicial en bottomnavigation.BottomNavigationView:

bottom_navigation_view.selectedItemId = R.id.navigation_item_messages

¿Ha sido útil esta solución?