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
。