Как добавить элементы опций только в один дочерний фрагмент с Android Компонентом архитектуры навигации? - PullRequest
0 голосов
/ 08 апреля 2020

Я использую компонент архитектуры навигации с androidx.

Я хотел бы добавить значок меню справа от панели навигации ТОЛЬКО на одном из моих дочерних фрагментов.

Возможно ли это ? Что я скучаю? Вот моя первая реализация тестового кода:

my_menu. xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/optionIconId"
        android:icon="@drawable/option_icon"
        android:visible="true"
        app:showAsAction="ifRoom|withText"/>
</menu>

TestFragment.kt

class TestFragment : Fragment() {

    /**
     * Fragment binding.
     */
    private var _binding: FragmentTestBinding? = null

    /**
     * Fragment binding.
     */
    private val binding get() = this._binding!!

    /**
     * @inheritdocs
     */
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        this._binding = FragmentTestBinding.inflate(inflater, container, false)
        return this.binding.root
    }

    /**
     * @inheritdocs
     */
    override fun onPrepareOptionsMenu(menu: Menu) {
        menu.findItem(R.id.optionIconId).isVisible = true
        super.onPrepareOptionsMenu(menu)
    }

    /**
     * @inheritdocs
     */
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when (item.itemId) {
            R.id.optionIconId -> {
                println("CLICK CLICK CLICK")
                true
            }
            else -> super.onOptionsItemSelected(item)
        }
    }
}

фрагмент_ теста. xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="test"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

1 Ответ

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

Вы можете управлять этим поведением из вашего текущего фрагмента или действия. Вам нужно создать одну панель инструментов для всех фрагментов (в вашей деятельности) и управляемую видимость меню там с измененным обратным вызовом навигации, или создать панели инструментов для каждого фрагмента с другим меню.

...