onNavigationItemSelected non appelé [duplicate]
Veuillez ne pas marquer cette question comme Duplicate, je sais qu'il y a beaucoup de questions comme celle-ci sur ce site.
Le onNavigationItemSelected () sur My MainActivity.ktn'a pas invoqué alors que je l' ai déjà setNavigationItemSelectedListener()à thiset mis NavigationViewcomme dernier enfant sur DrawerLayoutétiquette. Je ne comprends plus pourquoi ce problème est survenu.
Vous pouvez vérifier mon code ci-dessous
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>
Réponses
si vous souhaitez utiliser les boutons pour ouvrir une activité ou faire autre chose, vous pouvez simplement faire une chose dans les éléments du menu de navigation dans l'élément, écrivez-le comme suit
<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>
et dans l'activité principale.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)
}
j'espère que cela vous a été utile si vous voulez des informations supplémentaires, alors s'il vous plaît laissez-moi savoir que je peux vous aider avec cela au lieu d'utiliser ces longues méthodes, cette méthode est plus facile et efficace et si votre navigation est le menu de navigation du bas et que vous souhaitez basculer entre les fragments, alors s'il vous plaît laissez-moi savoir que je connais une méthode très simple pour cela.