Android навигация по NavigationItem выбрана, не вызывается - PullRequest
0 голосов
/ 25 марта 2020

У меня есть этот DrawerLayout

<?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()
        }
    }

Но слушатель выбранного элемента навигации никогда не вызывается. В конечном итоге он перемещается к месту назначения, но слушатель никогда не вызывается. Я проверил похожие посты, некоторые предлагали вывести на передний план навигационный вид, но безрезультатно. Пожалуйста, помогите ...

1 Ответ

0 голосов
/ 25 марта 2020

Хорошо, я нашел решение. Я положил:

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

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

В конце onCreate ... и теперь он работает.

...