onNavigationItemSelected não chamado [duplicate]
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
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.