onNavigationItemSelected nie nazywa się [duplicate]

Oct 01 2020

Proszę nie oznaczać tych pytań jako zduplikowanych, wiem, że na tej stronie jest wiele takich pytań.

Metoda onNavigationItemSelected () w My MainActivity.ktnie jest wywoływana, podczas gdy ja już setNavigationItemSelectedListener()to zrobiłem thisi umieszczam NavigationViewjako ostatnie dziecko w DrawerLayouttagu. Już nie rozumiem, dlaczego wystąpił ten problem.

Możesz sprawdzić mój kod poniżej

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>

Odpowiedzi

1 Yashirkhan Oct 01 2020 at 11:20

jeśli chcesz użyć przycisków do otwarcia działania lub chcesz zrobić cokolwiek innego, możesz po prostu zrobić jedną rzecz w elementach menu nawigacji w elemencie, napisz to jako

<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>

iw głównej działalności.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)
}

mam nadzieję, że było to dla Ciebie pomocne, jeśli chcesz uzyskać dodatkowe informacje, daj mi znać, mogę Ci w tym pomóc, ale nie używając długich metod, ta metoda jest łatwiejsza i wydajniejsza, a jeśli Twoja nawigacja to menu nawigacji dolnej i chcesz przełączać się między fragmentami to daj mi znać, znam bardzo prostą metodę.