Android 对话片段。听众。方向改变了。活动为空

Android 对话片段。听众。方向改变了。活动为空,android,Android,代码如下: class AddVideoDialog : DialogFragment(), EnterPasswordDialog.OKDialogListener { @SuppressLint("InflateParams") override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { . . . enterPasswordDia

代码如下:

class AddVideoDialog : DialogFragment(), EnterPasswordDialog.OKDialogListener
{
    @SuppressLint("InflateParams")
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog
    {
        .
        .
        .
        enterPasswordDialog.show(fragmentManager, "enterPassword")
        enterPasswordDialog.mListener = this
        .
        .
        .
        return builder.create()
    }

    override fun onDialogOK()
    {
        .
        .
        .
        //The problem is here! activity is null after orientation change.
        val mainFragment = activity.fragmentManager.findFragmentByTag(Brain.MAIN_FRAGMENT_TAG) as MainFragment
        .
        .
        .
    }
}
当显示上述DialogFragment时,如果用户执行方向更改,则
OKDialogListener
回调中的活动为空。谁能给我解释一下为什么会这样?谢谢。

谢谢你的翻译;)科特林很有趣,但我在那里是个初学者


但我可以看到的是,在
onCreateDialog()
中,您将侦听器设置为当前的
DialogFragment
。我怀疑在方向改变后显示的
对话框
仍然保持着该侦听器。由于此侦听器(=原始的
对话框片段
)不再附加到
活动
getActivity()
分别
活动
。因此,您必须将侦听器设置在可以确保
对话框片段
附加到当前
活动
的位置

活动
首先从何处获得其价值?你在AddVideoDialog的某个地方设置了吗?没有,我没有在AddVideoDialog中设置。它是每个片段(或者DialogFragment,因为它继承自片段)的通常属性,在Java中它将是getActivity()。非常感谢您的回答。我有一种感觉是这样的,但我可以用你这样的话来形容:-)最终,我发现了发生的事情。当出现EnterPasswordDialog时,AddVideoDialog正在通过
onPause
,对
activity
的调用在
onDialogOK
中为空,因为对话框已经通过
onPause