Saltar al contenido

onNavigationItemSelected no funciona en NavigationView

Te sugerimos que pruebes esta respuesta en un ambiente controlado antes de enviarlo a producción, saludos.

Solución:

Utilice este código:

navigationView = (NavigationView) findViewById(R.id.navigationView); 
navigationView.bringToFront();

Echa un vistazo a tu MainActivity.java.

Ha implementado las devoluciones de llamada para NavigationView.OnNavigationItemSelectedListener en MainActivity como a continuación,

@Override
public boolean onNavigationItemSelected(MenuItem menuItem) 
    // blah blah

También revisa el setupDrawerContent método.

private void setupDrawerContent(NavigationView navigationView) 
    navigationView.setNavigationItemSelectedListener(
            new NavigationView.OnNavigationItemSelectedListener() 
                @Override
                public boolean onNavigationItemSelected(MenuItem menuItem) 
                    menuItem.setChecked(true);
                    drawerLayout.closeDrawers();
                    return true;
                
            );

En este método está creando un local OnNavigationItemSelectedListener.

Entonces no estás usando el OnNavigationItemSelectedListener que has anulado en MainActivity.

La solución es usar this como argumento para setNavigationItemSelectedListener. Al hacer esto, todos sus clics se convertirán en onNavigationItemSelected de MainActivity en lugar de ir al local onNavigationItemSelected.

private void setupDrawerContent(NavigationView navigationView) 
    navigationView.setNavigationItemSelectedListener(this);

También mueva el código en el local onNavigationItemSelected al onNavigationItemSelected de MainActivity.

Entonces tus onNavigationItemSelected será algo como esto,

@Override
public boolean onNavigationItemSelected(MenuItem menuItem) 
    // Handle navigation view item clicks here.
    int id = menuItem.getItemId();
    menuItem.setChecked(true);
    drawerLayout.closeDrawers();

    if (id == R.id.nav_home) 
        // Handle the home action
        Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();
     else if (id == R.id.nav_the_wetlands) 
        Toast.makeText(this, "The Wetlands", Toast.LENGTH_SHORT).show();
        TheWetlandsFragment theWetlandsFragment = new TheWetlandsFragment();
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.relativelayout_for_fragment, theWetlandsFragment, theWetlandsFragment.getTag()).commit();
     else if (id == R.id.nav_the_mistbelt_forests) 
        Toast.makeText(this, "The Mistbelt Forests", Toast.LENGTH_SHORT).show();
    

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;

También cambia tu activity_main_drawer_view.xml de la siguiente manera para resolver el problema de selección múltiple que tiene en el panel de navegación,




    
        
    

    
        
            
            
            
        
    

    
        
            
            
            
            
            
            
            
            
        
    

    
        
            
            
        
    


Buena suerte.

También me enfrenté al mismo problema hace algún tiempo, y al final me di cuenta de que no había escrito la segunda línea del siguiente código

navigationView = (NavigationView) findViewById(R.id.navigation_view);        
navigationView.setNavigationItemSelectedListener(this);

asegúrese de haber escrito lo mismo, de lo contrario su oyente no funcionará

Te mostramos las reseñas y valoraciones de los usuarios

Agradecemos que desees añadir valor a nuestra información dando tu veteranía en las referencias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *