onNavigationItemSelected non appelé [duplicate]

Oct 01 2020

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

1 Yashirkhan Oct 01 2020 at 11:20

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.