Как правильно добавить меню опций на отдельный фрагмент с навигационной составляющей, не нарушая "поведение вверх" - PullRequest
1 голос
/ 27 марта 2019

У меня возникли проблемы с добавлением меню параметров для одного фрагмента, поскольку оно нарушает навигацию.Здесь мой код

У меня есть одно действие со стилем NoActionBar и с этим макетом

<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"
    android:fitsSystemWindows="true"
    tools:context=".ui.MainActivity">

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white">

        <fragment
            android:id="@+id/mainNavigationFragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:defaultNavHost="true"
            app:navGraph="@navigation/main_graph" />

        <com.google.android.material.appbar.AppBarLayout
            android:id="@+id/appbarLayout"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:layout_gravity="top">

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize" />

        </com.google.android.material.appbar.AppBarLayout>

        <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/bottomNavigationView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            app:labelVisibilityMode="labeled"
            app:menu="@menu/main_bottom_nav" />

    </androidx.coordinatorlayout.widget.CoordinatorLayout>

</layout>

в действии onCreate Я делаю эту настройку для навигации

private fun setupNavigation() {
        val navController = findNavController(R.id.mainNavigationFragment)

        //each fragment of botton nav
        val appBarConfiguration = AppBarConfiguration(setOf(
                R.id.actionSchedule,
                R.id.actionPayment,
                R.id.actionNotification,
                R.id.actionAccount))

        toolbar.setupWithNavController(navController, appBarConfiguration)
        bottomNavigationView.setupWithNavController(navController)
    }

override fun onSupportNavigateUp() =
            findNavController(R.id.mainNavigationFragment).navigateUp()

на каждом фрагменте навигационной кнопки у меня есть несколько пунктов назначения, и все работает как ожидалось.

Теперь мне нужно добавить меню только в самый правый фрагмент фрагмента навигационной кнопки, а затем на этот конкретный фрагмент добавить setHasOptionsMenu(true) вonСоздать и накачать меню в onCreateOptionsMenu, но меню не появляется.

Затем я добавляю setSupportActionBar(toolbar) к активности onCreate.

Теперь меню появляется только для этого фрагмента, но оно разбило все «ВВЕРХ» (стрелка назад на панели инструментов) любого пункта назначения (стрелка назад появляется, но когда я нажимаю, ничего не происходит).Если я уберу setSupportActionBar(toolbar) активности, снова будет работать UP, но не меню панели инструментов.

Что мне нужно сделать, чтобы меню работало только в одном фрагменте и ничего не сломалось?Спасибо

1 Ответ

2 голосов
/ 27 марта 2019

Если вы используете setSupportActionBar, вы должны использовать setupActionBarWithNavController(), а не toolbar.setupWithNavController согласно документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...