Android 显示来自片段的对话框时,未调用该片段

Android 显示来自片段的对话框时,未调用该片段,android,android-fragments,android-dialogfragment,fragmentmanager,Android,Android Fragments,Android Dialogfragment,Fragmentmanager,我正在展示一个片段中的一个片段。这样做的目的是在片段内部获得对blottomSheetDialogFragment的回调,而不是活动,所以我希望在内部接收片段 override fun onAttachFragment(childFragment: Fragment?) { super.onAttachFragment(childFragment) callback = childFragment as? Callback } 未调用此方法。在显示对话框

我正在展示一个片段中的一个片段。这样做的目的是在片段内部获得对blottomSheetDialogFragment的回调,而不是活动,所以我希望在内部接收片段

override fun onAttachFragment(childFragment: Fragment?) {
        super.onAttachFragment(childFragment)
        callback = childFragment as? Callback
    }
未调用此方法。在显示对话框时,我尝试使用fragmentManager和childFragmentManager来查看是否可以调用片段,但没有成功

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

AccountBottomSheetDialog dialog = AccountBottomSheetDialog.Companion.newFragment();
                dialog.show(getFragmentManager(), AccountBottomSheetDialog.Companion.getTAG());
有人知道怎么打电话吗


谢谢。

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

  • 将父片段作为
    newFragment
    的参数传递
  • 在您的子片段上将其设置为带有任何请求代码的目标片段(
    setTargetFragment
  • 将其作为
    getTargetFragment()
    在代码中使用,并将其转换为您喜欢的任何接口(当然是父片段实现的接口)

  • 注:要使上述方法起作用,父项和子项的片段管理器必须相同。

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

  • 将父片段作为
    newFragment
    的参数传递
  • 在您的子片段上将其设置为带有任何请求代码的目标片段(
    setTargetFragment
  • 将其作为
    getTargetFragment()
    在代码中使用,并将其转换为您喜欢的任何接口(当然是父片段实现的接口)

  • 注:要使上述方法起作用,片段管理器对于父对象和子对象必须是相同的。

    我认为它之所以不调用
    DialogFragment
    ,是因为
    DialogFragment
    控制其生命周期和其他方法重写与普通方法重写不同,请参阅

    如果您只是想回调父片段,您可以覆盖
    对话框片段
    中的
    onAttach
    方法,并使用上下文参数作为回调(强制转换),或者在
    对话框片段
    中设置回调的公共方法,在创建片段之后,您将调用它


    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
    }
    

    我认为它不调用
    DialogFragment
    的原因是
    DialogFragment
    控制其生命周期和其他方法重写的方式与普通方法不同,请参阅

    如果您只是想回调父片段,您可以覆盖
    对话框片段
    中的
    onAttach
    方法,并使用上下文参数作为回调(强制转换),或者在
    对话框片段
    中设置回调的公共方法,在创建片段之后,您将调用它


    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
    }
    

    可能有点晚,但现在是2019年,支持库
    androidx.appcompat:appcompat:1.1.0
    如果在子片段管理器中使用variant,则在我等待时调用
    子片段。
    下面是关于Kotlin的正确代码片段

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

    可能有点晚,但现在是2019年,支持库
    androidx.appcompat:appcompat:1.1.0
    如果在子片段管理器中使用variant,则在我等待时调用
    子片段。
    下面是关于Kotlin的正确代码片段

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

    onAttach方法我将只获取活动作为上下文,而不是片段。onAttach方法我将只获取活动作为上下文,而不是片段。