Android LiveData:方向更改后,通过DialogFragment重新创建两次对话框
我有一个liveData对象,用于控制警报对话框是否显示。 此警报对话框基于DialogFragment。 当为此liveData调用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对象自
onChanged(true)
时,将显示警报
现在,当警报显示且方向改变时,警报将被重新创建两次,一次在另一次之上。
这似乎是因为,Android在默认情况下会在方向改变时重新创建警报,但在方向改变时会再次调用liveDataonChanged(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
}