我已经查看了几个与DialogFragment中处理方向更改有关的问题,而且常见的主题似乎是askers没有得到任何答案,没有我理解的......
所以,我想采取不同的方法......有没有办法我可以通过编程方式关闭对话框...看看我的LogCat,我可以看到,如果对话框片段处于活动状态,屏幕方向是更改,然后我的活动重新启动。
一路上,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代码拒绝创建视图?
答案 0 :(得分:0)
旋转设备时,活动会执行
onSaveInstanceState
方法并保存当前状态,这意味着它也会保存你的片段状态,在重新执行后它会执行
onCreate(Bundle savedInstanceState)
方法再次,savedInstanceState保存您的旧数据,在这里您可以制作类似
的内容if (savedInstanceState == null){
YourDialogFragment f = new YourDialogFragment()
f.show // etc
}
只有一旦你的片段被创建,而不是将一个控件放在片段中,你可以通过活动控制它