Как создать BottomSheetDialogFragment, используя компонент архитектуры навигации? - PullRequest
0 голосов
/ 22 ноября 2018

Я использую BottomSheetDialogFragment для отображения нескольких пользовательских настроек.

Требование:

Когда я нажимаю на любую вкладку в BottomSheetDialogFragment, я заменяюфрагментируйте и добавьте его в backstack, чтобы при нажатии пользователем действия onBackPress или Up он возвращал фрагмент последнего параметра BottomSheetDialogFragment.

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

Проблема: если я использую компонент архитектуры навигации для перехода от FragmentA к BottomSheetDialogFragment, то получаю ошибку ниже.

java.lang.IllegalStateException: диалоговое окно не должно быть пустым BottomSheetDialogFragment

Я не знаю, как создать экземпляр BottomSheetDialogFragment с использованием компонента архитектуры навигации и, используя приведенный ниже код, не будет иметь backstack для поддержки с использованием компонента архитектуры навигации.

BottomSheetDialogFragment.show(FragmentManager manager, String tag)

1 Ответ

0 голосов
/ 09 июня 2019

В версии навигационного компонента 2.1.0-alpha04, Navigation Graph может содержать dialog в качестве одного из пунктов назначения.

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:id="@+id/main_navigation"
    app:startDestination="@id/startFragment">

    <fragment
        android:id="@+id/loginFragment"
        android:name="com.awesomeproject.android.authentication.login.LoginFragment"
        android:label="Login"
        tools:layout="@layout/login_fragment" />

    <dialog
        android:id="@+id/bottomSheet"
        android:name="com.awesomproject.android.BottomSheetFragment"
        tools:layout="@layout/bottom_sheet_dialog_fragment" />

</navigation>

BottomSheetFragment будет выглядеть аналогично другому BottomSheet.

class BottomSheetFragment : BottomSheetDialogFragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View =
            inflater.inflate(R.layout.bottom_sheet_dialog_fragment, container, false)
}

Тогда вы можете относиться к bottomSheet так же, как и к другим пунктам назначения.Вы можете перейти к этому месту назначения или передать safeArgs in.

Приветствия!

...