我有一个liveData对象,可用来控制是否显示我的警报对话框。
此警报对话框基于DialogFragment。
当为此liveData调用onChanged(true)
时显示警报。
现在,当警报显示且方向改变时,警报将被重新创建两次,一次又一次。
这似乎是因为,默认情况下,Android在方向更改时会重新创建警报,但在方向更改时会再次调用liveData onChanged(true)
。因此,警报创建了两次。
是否有一种方法可以阻止Android重新创建对话框本身,以便我自己可以通过LiveData对象处理重新创建的事情?
谢谢。
答案 0 :(得分:0)
由于它是一个对话框,因此可以在每次关闭对话框对象时将其设置为null,并在弹出对话框时创建一个新对象。并且每次检查是否为空时,如果不为空,则不要打开另一个对话框。如果为null,则仅打开对话框。
答案 1 :(得分:0)
您应该尝试使用'if()'语句检查是否
getFragmentManager().findFragmentByTag("dialog");
或
getFragmentManager().findFragmentById("idOfDialog")
返回null,如果是,则没有对话框,您可以创建新对话框。 我要使用的其他解决方案,处理配置更改。 https://developer.android.com/guide/topics/resources/runtime-changes 这样,您就可以将liveData的观察者放在onCreate中,并且只有在liveData发生更改时,它才会在旋转时触发,但这要做的更加复杂。
答案 2 :(得分:0)
这是因为当配置发生更改时,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
}