SearchView не свернут в новом фрагменте с компонентом навигации - PullRequest
1 голос
/ 25 апреля 2020

Я работаю с простым заданием, имеющим два фрагмента. Оба фрагмента имеют searchView как пункт меню. Проблема в том, что если я разверну поисковое представление в первом фрагменте, оно развернется во втором фрагменте и наоборот; чего я не хочу.

Фрагменты,

class TitleScreen : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_title_screen, container, false)
        setHasOptionsMenu(true)

        view.findViewById<Button>(R.id.play_btn).setOnClickListener {
            Navigation.findNavController(view).navigate(R.id.action_title_screen_to_register)
        }

        return view
    }

    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        inflater.inflate(R.menu.search, menu)
        super.onCreateOptionsMenu(menu, inflater)
    }
}

class Register : Fragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        // Inflate the layout for this fragment
        val view = inflater.inflate(R.layout.fragment_register, container, false)
        setHasOptionsMenu(true)
        view.findViewById<Button>(R.id.signup_btn).setOnClickListener {
            Navigation.findNavController(view).navigate(R.id.action_register_to_match)
        }
        return view
    }

    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        inflater.inflate(R.menu.search, menu)
        super.onCreateOptionsMenu(menu, inflater)
    }
}

Меню

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        android:icon="@drawable/ic_search_24px"
        android:title="search"
        app:showAsAction="always|collapseActionView" />
</menu>

Навигация,

<navigation 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"
            app:startDestination="@+id/title_screen">

    <fragment
            android:id="@+id/title_screen"
            android:name="com.example.android.navigationsample.TitleScreen"
            android:label="fragment_title_screen"
            tools:layout="@layout/fragment_title_screen">
        <action
                android:id="@+id/action_title_screen_to_register"
                app:destination="@id/register"
                app:popEnterAnim="@anim/slide_in_left"
                app:popExitAnim="@anim/slide_out_right"
                app:enterAnim="@anim/slide_in_right"
                app:exitAnim="@anim/slide_out_left"/>
    </fragment>
    <fragment
            android:id="@+id/register"
            android:name="com.example.android.navigationsample.Register"
            android:label="fragment_register"
            tools:layout="@layout/fragment_register"/>
</navigation>

Как сохранить меню свернутым в следующем фрагменте? Заранее спасибо.

1 Ответ

1 голос
/ 25 апреля 2020

Используйте другой android:id. Система меню не имеет представления, какие фрагменты дают, какие MenuItem, поэтому все, что она видит, это один и тот же элемент меню и, следовательно, правильно сохраняет свое состояние. Использование другого android:id для другого фрагмента означает, что Меню обрабатывает их как отдельные пункты меню с отдельным свернутым / развернутым состоянием.

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