从片段显示对话框时未调用onAttachFragment

时间:2019-04-22 16:25:18

标签: android android-fragments android-dialogfragment fragmentmanager

我正在显示片段中的BottomSheetDialogFragment。这个想法是让Fragment内的BottomSheetDialogFragment回调而不是活动,所以我希望在其中接收该片段

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

未调用此方法。在显示对话框时,我尝试使用fragmentManager和childFragmentManager来查看是否可以调用onAttachFragment但没有运气。

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

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

有人知道怎么打电话吗?

谢谢。

3 个答案:

答案 0 :(得分:0)

无法直接回答您的问题,但这是您可以采取的解决方法:

  1. 将父片段作为newFragment的参数传递
  2. 使用任何请求代码(setTargetFragment)在子片段上将其设置为目标片段
  3. 在您的代码中以getTargetFragment()的形式使用它,并将其转换为您喜欢的任何接口(当然,父片段会实现该接口)。

PS .:要使以上各项正常工作,片段管理器的父代和子代必须相同。

答案 1 :(得分:0)

我认为它之所以没有调用onAttachFragment是因为DialogFragment控制着它的生命周期,并且其他方法的覆盖方式与正常方法不同,请参见documentation

如果您只想对父片段进行回调,则可以覆盖onAttach内的DialogFragment方法,并使用context参数作为回调(广播它),或者使用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
}

答案 2 :(得分:0)

如果使用支持库androidx.appcompat:appcompat:1.1.0,如果在子片段管理器中使用变体,则可能要晚一点了,但是在我等待时调用onAttachFragment。 这是Kotlin上正确的代码片段

ChildInfoDialog.getInstance(it.data).show(childFragmentManager, ChildInfoDialog.TAG)