onNavigationItemSelected no llamado [duplicado]

Oct 01 2020

No marque esta pregunta como duplicada, sé que hay muchas preguntas como esta en este sitio.

El onNavigationItemSelected () en Mi MainActivity.ktno invoca mientras que ya setNavigationItemSelectedListener()a thisy puse NavigationViewcomo el último niño en DrawerLayoutla etiqueta. Ya no entiendo por qué ocurrió este problema.

Puedes consultar mi código a continuación

MainActivity.kt

package com.example.googlelike

import android.os.Bundle
import android.util.Log
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.drawerlayout.widget.DrawerLayout
import androidx.navigation.findNavController
import androidx.navigation.ui.NavigationUI
import com.example.googlelike.databinding.ActivityMainBinding
import com.google.android.material.navigation.NavigationView

class MainActivity : AppCompatActivity(),NavigationView.OnNavigationItemSelectedListener {
    lateinit var binding: ActivityMainBinding
    lateinit var drawerLayout: DrawerLayout
    lateinit var navigationView: NavigationView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main)

        drawerLayout = binding.drawerLayout
        navigationView = binding.navView
        navigationView.setNavigationItemSelectedListener(this)

        val navController = this.findNavController(R.id.nav_host_fragment)
        NavigationUI.setupActionBarWithNavController(this,navController,drawerLayout)
        NavigationUI.setupWithNavController(navigationView,navController)

    }

    override fun onSupportNavigateUp(): Boolean {
        val navController = this.findNavController(R.id.nav_host_fragment)

        return NavigationUI.navigateUp(navController,drawerLayout)
    }

    override fun onNavigationItemSelected(p0: MenuItem): Boolean {
        Log.i("MainActivity","Item CLICKED")

        return true
    }


}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

    </data>
<androidx.drawerlayout.widget.DrawerLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/drawer_layout">

    <com.google.android.material.navigation.NavigationView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/nav_view"
        app:headerLayout="@layout/nav_header"
        app:menu="@menu/navdrawer_menu"
        android:layout_gravity="start"/>
</androidx.drawerlayout.widget.DrawerLayout>

</layout>

Respuestas

1 Yashirkhan Oct 01 2020 at 11:20

si desea utilizar los botones para abrir una actividad o desea hacer cualquier otra cosa, simplemente puede hacer una cosa en los elementos del menú de navegación en el elemento escribir esto como

<item
   android:Onclick=any function you can name of your choice/i am taking it as "open profile"
   android:icon="icon"
   android:tile="title"></item>

y en actividad principal.kt

class MainActivity : AppCompatActivity(){
lateinit var drawerLayout: DrawerLayout
lateinit var navigationView: NavigationView
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
    ...
}

//let my activity name be profile
fun "open profile"(menu item: Menu item){
    val intent = Intent(this, profile::class.java)
    startActivity(intent)
}

Espero que haya sido útil para usted si desea obtener más información, hágamelo saber que puedo ayudarlo con eso, en lugar de usar métodos tan largos, este método es más fácil y eficiente y si su navegación es el menú de navegación inferior y desea cambiar entre fragmentos, entonces por favor avíseme que conozco un método muy fácil para hacerlo.