Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓对话框片段解雇_Android_Android Dialogfragment - Fatal编程技术网

Android 安卓对话框片段解雇

Android 安卓对话框片段解雇,android,android-dialogfragment,Android,Android Dialogfragment,我已经研究了几个与处理DialogFragment中的方向变化有关的问题,共同的主题似乎是提问者没有得到任何答案,我一点也不理解 所以,我想采取一种不同的方法。。。是否有一种方法可以通过编程方式取消对话框。。。查看我的LogCat,我可以看到,如果dialogfragment处于活动状态,并且屏幕方向发生了更改,那么我的活动将重新启动 在这个过程中,DialogFragment也会重新启动,但这发生在onCreate之后和onResume之前(尽可能接近)。在对话框中检测到这一点对我来说相当简单

我已经研究了几个与处理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??