抽屉导航菜单点击监听器不工作如何解决这个问题



抽屉导航工作正常,但当单击某个项目时,不会生成任何事件,导航也会终止。我应该使用哪个事件侦听器?我想通过单击图像视图来使用抽屉导航。抽屉导航打开成功,但打开后单击菜单时,不会生成单击事件,导航将终止。我们如何解决这个问题?

layout_test.xml

<androidx.drawerlayout.widget.DrawerLayout
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"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".Activities.test">
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="end"
android:fitsSystemWindows="true"
app:menu="@menu/test_menu"
app:headerLayout="@layout/header_test"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"
android:src="@drawable/ico_menu_b"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
</ImageView>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.drawerlayout.widget.DrawerLayout>

header_test.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="@color/black"
android:gravity="center"
android:orientation="vertical"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Header"
android:textSize="20sp"
android:textStyle="bold"/>
</LinearLayout>

test_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu1"
android:title="work1"
android:enabled="true"
android:icon="@drawable/notice_logo"/>
<item android:id="@+id/menu2"
android:title="work2"
android:enabled="true"
android:icon="@drawable/my_page"/>
<item android:id="@+id/logout_menu"
android:title="logout"
android:enabled="true"
android:icon="@drawable/ico_out"/>
</menu>

测试.kt

class test : AppCompatActivity() , NavigationView.OnNavigationItemSelectedListener{
private lateinit var binding:  LayoutTestBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_test)
binding = LayoutTestBinding.inflate(layoutInflater)
setContentView(binding.root)

binding.menu.setOnClickListener {
binding.drawerLayout.openDrawer(GravityCompat.END)
}
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.detail_appbar_menu, menu)
val logouticon = menu?.findItem(R.id.logout_menu)
logouticon?.actionView?.setOnClickListener {
onOptionsItemSelected(logouticon)
}
val menu2 = menu?.findItem(R.id.menu2)
menu2?.actionView?.setOnClickListener {
onOptionsItemSelected(menu2)
}
val menu1 = menu?.findItem(R.id.menu1)
menu1?.actionView?.setOnClickListener {
onOptionsItemSelected(menu1)
}
return super.onCreateOptionsMenu(menu)
}
override fun onNavigationItemSelected(item: MenuItem): Boolean {
when(item.itemId){
R.id.logout_menu -> {
Toast.makeText(this@test,"logout", Toast.LENGTH_SHORT).show()
}
R.id.menu2 -> {
Toast.makeText(this@test,"dddddd", Toast.LENGTH_SHORT).show()
}
R.id.menu1 -> {
Toast.makeText(this@test,"?????", Toast.LENGTH_SHORT).show()
}
}
return false
}
}

您必须在onCreate方法中使用此行

binding.navview.setNavigationItemSelectedListener(this)

所以你的onCreate函数看起来像这个

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_test)
binding = LayoutTestBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.navview.setNavigationItemSelectedListener(this)
binding.menu.setOnClickListener {
binding.drawerLayout.openDrawer(GravityCompat.END)
}
}

它会起作用的。

最新更新