setOnNavigationItemSelectedListener obsoleto

2 minutos de lectura

avatar de usuario
Jeyasurya

Actualmente estoy trabajando en una aplicación que tiene una barra de navegación inferior con tres elementos de menú. yo había usado setOnNavigationItemSelectedListener() para los elementos en los que se hace clic. pero ahora me enfrento al problema de que el método se ha depreciado.

  • Idioma de la aplicación: Java
  • Tema: 'setOnNavigationItemSelectedListener(com.google.android.material.bottomnavigation.BottomNavigationView.OnNavigationItemSelectedListener)' is deprecated

¿Hay alguna forma de resolverlo? ¿Hay alguna alternativa mejor que setOnNavigationItemSelectedListener() método.

avatar de usuario
marcinj

Está en desuso según las fuentes de github: BottomNavigationView.setOnNavigationItemSelectedListener

En su comentario se puede leer:

@deprecated Use {@link NavigationBarView#setOnItemSelectedListener(OnItemSelectedListener)}
   *     instead.

así que usa NavigationBarView.setOnItemSelectedListener de su clase base:

  /**
   * Set a listener that will be notified when a navigation item is selected. This listener will
   * also be notified when the currently selected item is reselected, unless an {@link
   * OnItemReselectedListener} has also been set.
   *
   * @param listener The listener to notify
   * @see #setOnItemReselectedListener(OnItemReselectedListener)
   */
  public void setOnItemSelectedListener(@Nullable OnItemSelectedListener listener) {
    selectedListener = listener;
  }

También vea esto comprometerse

ya que explica la confusión sobre este cambio:

Los oyentes fueron desaprobados a favor de
NavigationBarView#OnItemSelectedListener y
NavigationBarView#OnItemReselectedListenerpero la documentación de obsolescencia nunca se agregó, por lo que no está claro qué deberían usar los desarrolladores en su lugar.

  • Lo intenté. funciona bien, gracias. pero la velocidad de cambio entre elementos de navegación es un poco más lenta que OnNavigationItemSelectedListener. ¿Alguna sugerencia para mejorarlo? De todas formas, gracias por la ayuda

    – Jeyasurya

    18 de junio de 2021 a las 3:43

  • tal vez agregue un oyente vacío a setOnItemReselectedListener, de esta manera su oyente en setOnItemSelectedListener no será llamado cuando se vuelva a seleccionar el elemento

    – marcinj

    18 de junio de 2021 a las 8:13

avatar de usuario
Abu Said

puedes probar setonItemSelectedListener. esta funcionando igual que setOnNavigationItemSelectedListener()[tested in android 11]

bnv.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            int id = item.getItemId();
            switch(id){
              //check id
            }
            return true;
        }
    });

Kotlin:

bnv.setOnItemSelectedListener { item ->
            when (item.itemId) {
            }
            true
        }

Nosotros podemos usar setOnItemSelectedListener en vez de setOnNavigationItemSelectedListener y
setOnItemReselectedListener en vez de setOnNavigationItemReselectedListener

navView.setOnItemSelectedListener {
    // do something
    true
}

// In case the default menu can be the first menu 
// Should set the default selected menu BETWEEN setOnItemSelectedListener and setOnItemReselectedListener. 
// It will make setOnItemSelectedListener fired when you launch app. 

// If you set default menu AFTER setOnItemReselectedListener. 
// Then setOnItemReselectedListener will fired when you launch app
navView.selectedItemId = R.id.navigation_home


navView.setOnItemReselectedListener {
    // do something
}

puedes usar en Kotlin

buttmNav.setOnItemSelectedListener { item ->
        when (item.itemId) {
        }
        true
    }

 viewBindingMainActivity.navView.setOnItemSelectedListener { menuItem ->
            if (menuItem.itemId != R.id.navigation_home) {
                Add your code
                false
            } else {
                Add your code
                true
            }
        }

kotlin: use setOnItemSelectedListener

    bottomNavigationView.setOnItemSelectedListener { item: MenuItem ->
            when (item.itemId) {
                 R.id. ... -> {
                    Add your code
                 true
            }
            
            else ->
                true
        }

¿Ha sido útil esta solución?