首页 > 解决方案 > 未调用 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()
        }
    }

但是永远不会调用导航选定项侦听器。它最终导航到目的地,但从未调用过侦听器。我检查了类似的帖子,一些建议将导航视图放在前面,但无济于事。请帮忙 ...

标签: androidnavigation

解决方案


好的,我找到了解决方案。我放了:

navView.bringToFront()
    navView.setNavigationItemSelectedListener { item ->

        if (item.itemId == R.id.nav_stock_home) {
            finish()
        }
        true
    }

在 onCreate... 结束时,它现在可以工作了。


推荐阅读