onNavigationItemSelected non chiamato [duplicate]
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
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.