onNavigationItemSelected non chiamato [duplicate]

Oct 01 2020

Per favore non contrassegnare questa domanda come duplicata, so che ci sono molte domande come questa in questo sito.

OnNavigationItemSelected () su My MainActivity.ktnon è stato richiamato mentre ero già setNavigationItemSelectedListener()a thise messo NavigationViewcome ultimo figlio sul DrawerLayouttag. Non capisco più perché si sia verificato questo problema.

Puoi controllare il mio codice qui sotto

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>

Risposte

1 Yashirkhan Oct 01 2020 at 11:20

se vuoi usare i pulsanti per aprire un'attività o vuoi fare qualcos'altro puoi semplicemente fare una cosa nelle voci del menu di navigazione nella voce scrivila come

<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 in 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)
}

spero che sia stato utile per te se desideri ulteriori informazioni, per favore fammi sapere che posso aiutarti con questo invece di usare quei metodi lunghi questo metodo è più facile ed efficiente e se la tua navigazione è nel menu di navigazione in basso e vuoi passare da un frammento all'altro allora per favore fatemi sapere che conosco un metodo molto semplice per questo.