Как эффективно общаться от ChildFragment к ParentFragment в Android
Фрагмент - это часть пользовательского интерфейса или поведения приложения, которая может быть помещена в действие.
Взаимодействие с фрагментами осуществляется через FragmentManager, который можно получить через Activity.getFragmentManager()
и Fragment.getFragmentManager()
.
Фрагмент тесно связан с деятельностью, в которой он находится, и не может использоваться отдельно от него. Хотя фрагмент определяет свой собственный жизненный цикл, этот жизненный цикл зависит от его активности. Если действие остановлено, никакие фрагменты внутри него не могут быть запущены. Когда активность будет уничтожена, все фрагменты будут уничтожены.
Существуют различные способы связи между фрагментами, например интерфейс, общий ViewModel
и т. Д.
Но знаете ли вы, что мы можем легко связываться от дочернего фрагмента к родительскому фрагменту и получать обратный вызов в onActivityResult()
в родительском фрагменте, используя стандартные методы setTargetFragment()
и getTargetFragment()
?
Пример использования
Когда мы открываем фрагмент диалогового окна, в котором пользователю необходимо выбрать параметр из списка доступных параметров, а позже, когда они нажимают кнопку «ОК», нам необходимо вернуть выбранный параметр в родительский фрагмент.
Шаги
- Если мы хотим общаться от одного фрагмента к другому, тогда из
ParentFragment
мы должны использоватьsetTargetFragment
(ParentFragment
экземпляр,RequestCode
). - После этого мы вызываем метод
show()
во фрагменте диалога, чтобы отобразить список доступных опций. - Затем используйте
onActivityResult
(RequestCode
,Activity.RESULT_OK
, намерение). Таким образом, обратный вызов отChildFragment
может быть получен в методе переопределенияonActivityResult
ParentFragment
. - Из
ChildFragment
мы должны использоватьgetTargetFragment()
, который возвращает экземплярParentFragment
, если что-то установлено с помощьюsetTargetFragment()
.
Давайте лучше разберемся на примере.
Шаг 1. Давайте вызовем showOptionsDialog()
в родительском фрагменте, который показывает OptionsDialogFragment
со списком параметров.
Шаг 2: Реализуйте onActivityResult()
в ParentFragment
, где мы получаем обратный вызов от ChildFragment
и выполняем действие в зависимости от результата.
Шаг 3. Когда пользователь щелкает параметр в OptionsDialogFragment
, затем вызывается onExit(selection: String)
, где мы пишем нашу логику для возврата обратного вызова к ParentFragment
.
Из документации setTargetFragment()
.
Из документации getTargetFragment()
.
/** * Return the target fragment set by {#setTargetFragment}. */ @Nullable final public Fragment getTargetFragment() { ............ }
Пожалуйста, дайте мне знать ваши предложения и комментарии.
Спасибо за прочтение!