实时数据:通过 DialogFragment 的对话框在方向更改后重新创建两次



我有一个 liveData 对象,用于控制何时显示警报对话框。 此警报对话框基于对话片段。 当为此实时数据调用onChanged(true)时,将显示警报。

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

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

谢谢。

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

这是因为当配置发生更改时,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 (('语句

getFragmentManager().findFragmentByTag("dialog");

getFragmentManager().findFragmentById("idOfDialog")

返回 null,如果是,则没有对话框,您可以创建新的。 要使用的其他解决方案,处理配置更改。https://developer.android.com/guide/topics/resources/runtime-changes 有了这个,你可以将 liveData 的观察者放在 onCreate 中,它不会在旋转时触发,只有在 liveData 发生变化时才会触发,但这更复杂。

最新更新