我正在显示片段中的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());
有人知道怎么打电话吗?
谢谢。
答案 0 :(得分:0)
无法直接回答您的问题,但这是您可以采取的解决方法:
newFragment
的参数传递setTargetFragment
)在子片段上将其设置为目标片段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)