Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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 LiveData:方向更改后,通过DialogFragment重新创建两次对话框_Android_Android Dialogfragment_Android Orientation_Android Livedata - Fatal编程技术网

Android LiveData:方向更改后,通过DialogFragment重新创建两次对话框

Android LiveData:方向更改后,通过DialogFragment重新创建两次对话框,android,android-dialogfragment,android-orientation,android-livedata,Android,Android Dialogfragment,Android Orientation,Android Livedata,我有一个liveData对象,用于控制警报对话框是否显示。 此警报对话框基于DialogFragment。 当为此liveData调用onChanged(true)时,将显示警报 现在,当警报显示且方向改变时,警报将被重新创建两次,一次在另一次之上。 这似乎是因为,Android在默认情况下会在方向改变时重新创建警报,但在方向改变时会再次调用liveDataonChanged(true)。因此,警报会创建两次 有没有办法阻止Android重新创建对话框本身,这样我就可以通过LiveData对象自

我有一个liveData对象,用于控制警报对话框是否显示。 此警报对话框基于DialogFragment。 当为此liveData调用
onChanged(true)
时,将显示警报

现在,当警报显示且方向改变时,警报将被重新创建两次,一次在另一次之上。 这似乎是因为,Android在默认情况下会在方向改变时重新创建警报,但在方向改变时会再次调用liveData
onChanged(true)
。因此,警报会创建两次

有没有办法阻止Android重新创建对话框本身,这样我就可以通过LiveData对象自己处理一次重新创建


谢谢

因为它是一个对话框,所以每次关闭对话框对象时,都可以将其设为null,并在弹出对话框时创建一个新对象。每次检查null大小写,如果不是null,就不要打开另一个对话框。如果为空,则仅打开对话框

您应该尝试使用“if()”语句if进行检查

getFragmentManager().findFragmentByTag("dialog");

返回null,如果是,则没有对话框,您可以创建新对话框。 我要使用的其他解决方案,处理配置更改。
有了这个,你可以将你的liveData观察者放在onCreate中,旋转时它不会触发,只有当liveData发生变化时才会触发,但这样做更复杂。

这是因为当配置发生变化时,android本身会在上面再创建一层。 希望这会有所帮助

if (savedInstanceState == null) {
    // only create fragment if activity is started for the first time
    mFragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();

    FragmentOne fragment = new FragmentOne();

    fragmentTransaction.add(R.id.fragment_container, fragment);
    fragmentTransaction.commit();
} else {        
    // do nothing - fragment is recreated automatically
}

试试这个解决方案,发一些代码来查看否决票?你是如何处理这个问题的?
if (savedInstanceState == null) {
    // only create fragment if activity is started for the first time
    mFragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();

    FragmentOne fragment = new FragmentOne();

    fragmentTransaction.add(R.id.fragment_container, fragment);
    fragmentTransaction.commit();
} else {        
    // do nothing - fragment is recreated automatically
}