android - 未调用 Android 导航 onNavigationItemSelected
问题描述
我有这个抽屉布局
<?xml version="1.0" encoding="utf-8"?>
<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/stock_drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/stock_app_bar"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_stock_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/stock_nav_header"
app:menu="@menu/stock_activity_drawer" />
</androidx.drawerlayout.widget.DrawerLayout>
然后在活动中我有以下 onCreate 函数:
class StockMainActivity: AppCompatActivity() {
private lateinit var appBarConfiguration: AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_stock_main)
val toolbar: Toolbar = findViewById(R.id.stock_toolbar)
setSupportActionBar(toolbar)
val drawerLayout: DrawerLayout = findViewById(R.id.stock_drawer_layout)
val navView: NavigationView = findViewById(R.id.nav_stock_view)
navView.bringToFront()
navView.setNavigationItemSelectedListener { item ->
if (item.itemId == R.id.nav_stock_home) {
finish()
}
true
}
val navController = findNavController(R.id.nav_stock_host_fragment)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
appBarConfiguration = AppBarConfiguration(setOf(
R.id.nav_stock_home,
R.id.stock_navigation_fragment
), drawerLayout)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
override fun onSupportNavigateUp(): Boolean {
val navController = findNavController(R.id.nav_stock_host_fragment)
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
}
但是永远不会调用导航选定项侦听器。它最终导航到目的地,但从未调用过侦听器。我检查了类似的帖子,一些建议将导航视图放在前面,但无济于事。请帮忙 ...
解决方案
好的,我找到了解决方案。我放了:
navView.bringToFront()
navView.setNavigationItemSelectedListener { item ->
if (item.itemId == R.id.nav_stock_home) {
finish()
}
true
}
在 onCreate... 结束时,它现在可以工作了。
推荐阅读
- java - 如何创建我使用泛型类型 T.class 的实例的泛型方法?
- r - 如何在 geom_jitter 中用其抖动的相应颜色为 xlabs 着色?
- c - 所有最大元素及其数组位置
- css - Safari CSS 列显示溢出错误
- python - 我喜欢修改我的选择字段,但没有输出
- teiid - QueryParser 不解析带有除 ansi-quoted 之外的带引号标识符的 sql 语句
- django - Django:如果记录不存在,则将记录添加到数据库表
- oracle - 在 Oracle View 的 where 子句中添加条件
- angular - 初始化表单后,Angular Reactive表单设置具有禁用属性的值
- javascript - 如何修复谷歌地图折线直线拥堵?