onNavigationItemSelected não chamado [duplicate]

Oct 01 2020

Não marque essas perguntas como duplicadas, sei que há muitas perguntas como essa neste site.

O onNavigationItemSelected () no meu MainActivity.ktnão invocada enquanto eu já setNavigationItemSelectedListener()para thise colocar NavigationViewcomo o último filho na DrawerLayouttag. Eu não entendo mais porque esse problema ocorreu.

Você pode verificar meu código abaixo

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>

Respostas

1 Yashirkhan Oct 01 2020 at 11:20

se quiser usar os botões para abrir uma actividade ou quiser fazer qualquer outra coisa, poderá simplesmente fazer uma coisa nos itens do menu de navegação no item escreva isto 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>

e em main activity.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 tenha sido útil para você se quiser alguma informação adicional, então por favor me diga que eu posso ajudá-lo com isso em vez de usar métodos longos, este método é mais fácil e eficiente e se sua navegação for no menu inferior e você deseja alternar entre os fragmentos então por favor, deixe-me saber que conheço um método muito fácil para isso.