【发布时间】:2020-10-01 03:15:48
【问题描述】:
请不要将此问题标记为重复,我知道这个网站上有很多这样的问题。
我的MainActivity.kt 上的onNavigationItemSelected() 没有被调用,而我已经将setNavigationItemSelectedListener() 转换为this 并将NavigationView 作为DrawerLayout 标签上的最后一个孩子。我不明白了,为什么会出现这个问题。
你可以在下面查看我的代码
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>
【问题讨论】:
-
setNavigationItemSelectedListener在您使用 Navigation 和NavigationUI.setupWithNavController时几乎不需要,因为按照 the documentation,这已经为您做了正确的事情。如果你只想记录,你应该listen for navigation events。 -
没有
setNavigationItemSelectedListener怎么办
标签: android kotlin navigation-drawer navigationview