Android 安卓对话框片段解雇
我已经研究了几个与处理DialogFragment中的方向变化有关的问题,共同的主题似乎是提问者没有得到任何答案,我一点也不理解 所以,我想采取一种不同的方法。。。是否有一种方法可以通过编程方式取消对话框。。。查看我的LogCat,我可以看到,如果dialogfragment处于活动状态,并且屏幕方向发生了更改,那么我的活动将重新启动 在这个过程中,DialogFragment也会重新启动,但这发生在onCreate之后和onResume之前(尽可能接近)。在对话框中检测到这一点对我来说相当简单,在这种情况下,我想做的是中止对话框视图的创建。到目前为止,我所尝试的是:Android 安卓对话框片段解雇,android,android-dialogfragment,Android,Android Dialogfragment,我已经研究了几个与处理DialogFragment中的方向变化有关的问题,共同的主题似乎是提问者没有得到任何答案,我一点也不理解 所以,我想采取一种不同的方法。。。是否有一种方法可以通过编程方式取消对话框。。。查看我的LogCat,我可以看到,如果dialogfragment处于活动状态,并且屏幕方向发生了更改,那么我的活动将重新启动 在这个过程中,DialogFragment也会重新启动,但这发生在onCreate之后和onResume之前(尽可能接近)。在对话框中检测到这一点对我来说相当简单
if (normal_conditions_detected)
{
View v = inflater.inflate (R.layout.dialog_layout, container, false);
final Dialog d = getDialog();
d.setTitle (R.string.sensor_config);
... more stuff
return v
}
else
{
getDialog().cancel();
return null;
}
这确实避免了我以前得到的空指针废话,但现在我得到的是一个只能描述为空对话框的对话框,即使有cancel()命令。有没有办法让我的dialogFragment代码拒绝创建视图?当您旋转设备时,活动会执行
onSaveInstanceState
onCreate(Bundle savedInstanceState)
方法并保存当前状态,这意味着它在执行后也会保存片段状态
onSaveInstanceState
onCreate(Bundle savedInstanceState)
方法,savedInstanceState保存您的旧数据,在这里您可以
if (savedInstanceState == null){
YourDialogFragment f = new YourDialogFragment()
f.show // etc
}
只有在创建片段后,您才可以通过活动控制它,而不是将控件放在片段中我认为这将引发NullPointerException,因为DialogFragment将在屏幕旋转后恢复,因为它有自己的生命周期(这是一个猜测),如果savedInstanceState不为null,关闭对话框不是更好吗?我对传递给onCreate的包做了一个简短的实验。当我第一次启动活动时,Bundle是null,当我旋转屏幕时,Bundle肯定不是null。我想我需要弄清楚的是如何在bundle中找到DialogFragment信息并将其删除??或者检测并删除它,然后在生命周期中更好的点启动DialogFragment??