onAttachFragment не вызывается при отображении диалога из фрагмента - PullRequest
0 голосов
/ 22 апреля 2019

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

override fun onAttachFragment(childFragment: Fragment?) {
        super.onAttachFragment(childFragment)
        callback = childFragment as? Callback
    }

Этот метод не вызывается.Я пытался использовать фрагменты и childFragmentManager при отображении диалогового окна, чтобы увидеть, могу ли я вызвать onAttachFragment, но не повезло.

AccountBottomSheetDialog dialog = AccountBottomSheetDialog.Companion.newFragment();
                dialog.show(getChildFragmentManager(), AccountBottomSheetDialog.Companion.getTAG());

AccountBottomSheetDialog dialog = AccountBottomSheetDialog.Companion.newFragment();
                dialog.show(getFragmentManager(), AccountBottomSheetDialog.Companion.getTAG());

Кто-нибудь знает, как вызвать это?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Я думаю, причина того, что он не вызывает onAttachFragment, заключается в том, что DialogFragment управляет его жизненным циклом, а другие методы переопределяют не так, как нормальные, см. документация .

Если вы просто хотите получить обратный вызов к родительскому фрагменту, вы можете либо переопределить метод onAttach внутри DialogFragment и использовать параметр контекста в качестве обратного вызова (привести его), либо иметь открытыйметод внутри вашего DialogFragment, который устанавливает обратный вызов, который вы бы вызвали после создания этого фрагмента.


onAttach метод:

override fun onAttach(context: Context?) {
    super.onAttach(context)
    callback = context as? Callback
}

открытый метод установки обратного вызова:

//parent fragment: after initializing it    
childFragment.setCallback(this@ParentFragment)//or pass in other callbacks

//child fragment: 
fun setCallback(callback: Callback) {
  this.callback = callback
}
0 голосов
/ 22 апреля 2019

Невозможно ответить на ваш вопрос напрямую, но вот обходной путь, который вы могли бы принять:

  1. Передайте ваш родительский фрагмент как параметр newFragment
  2. Установите его для вашего дочернего фрагмента какцелевой фрагмент с любым кодом запроса (setTargetFragment)
  3. Используйте его в своем коде как getTargetFragment() и приведите его к любому интерфейсу, который вам нравится (интерфейс, который реализует ваш родительский фрагмент, разумеется).

PS .: для работы вышеперечисленного менеджер фрагментов должен быть одинаковым для родителя и потомка.

...