Передача данных из фрагмента нижнего листа во фрагмент - PullRequest
0 голосов
/ 19 апреля 2020

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

BottomSheetDialogFragment.kt

class LogoBottomSheetFragment : BottomSheetDialogFragment() {

private var _binding: FragmentBottomSheetAccountLogoBinding? = null
private val binding get() = _binding!!

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    _binding = FragmentBottomSheetAccountLogoBinding.inflate(inflater, container, false)

    return binding.root
}

override fun onDestroyView() {
    super.onDestroyView()
    _binding = null
}
}

И вот как я открываю диалог в моей навигации. xml из моего основного фрагмента:

    <dialog
    android:id="@+id/logoBottomSheetFragment"
    android:name="com.th3pl4gu3.locky.ui.main.add.account.LogoBottomSheetFragment"
    android:label="LogoBottomSheetFragment"
    tools:layout="@layout/fragment_bottom_sheet_account_logo" />

Теперь я хочу передать данные из нижнего листа в основной фрагмент.

Есть ли правильный способ сделать это? Может кто-нибудь, пожалуйста, помогите мне.

Спасибо.

1 Ответ

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

По состоянию на Навигация 2.3.0-alpha02, Навигация имеет встроенную поддержку Возвращение результата в предыдущее место назначения.

Это работает в двух частях, ваш первый фрагмент (тот, который хочет получить результат) будет использовать navController.currentBackStackEntry?.savedStateHandle, чтобы получить ссылку на SavedStateHandle, связанный с его NavBackStackEntry в NavController. Затем он может observe конкретный ключ получить обратный вызов при каждом изменении этого ключа.

Второй фрагмент (тот, который доставляет результат, т. Е. Ваш LogoBottomSheetFragment) получит ссылку на тот же самый SavedStateHandle с помощью navController.previousBackStackEntry?.savedStateHandle. Когда этот второй фрагмент вызывает set для SavedStateHandle, этот результат затем становится доступным для первого фрагмента.

Обратите внимание, что есть некоторые DialogFragment специфицированные c соображения , чтобы сохранить в виду - поскольку предыдущий фрагмент равен RESUMED, даже когда отображается BottomSheetFragment, результат будет немедленно отправлен на ваш первый фрагмент.

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