У меня есть объект liveData, который я использую для управления отображением моего диалогового окна с предупреждениями.
это диалоговое окно предупреждения основано на DialogFragment.
Предупреждение отображается, когда onChanged(true) вызывается для этих liveData.
Теперь, когда отображается предупреждение и изменяется ориентация, предупреждение создается дважды, одно поверх другого.
Похоже, это связано с тем, что Android по умолчанию повторно создает предупреждение при изменении ориентации, но затем при изменении ориентации снова вызывается liveData onChanged(true). Таким образом, оповещение создается дважды.
Есть ли способ остановить Android от воссоздания самого диалогового окна, чтобы я мог обрабатывать воссоздание один раз сам через объект LiveData?
Спасибо.
опубликуйте код, чтобы увидеть
y голос против?
как ты справился с проблемой?
Поскольку это диалоговое окно, вы можете сделать объект диалога нулевым каждый раз, когда он будет закрыт, и, выскакивая из него, создавать новый объект. И каждый раз проверяйте нулевой регистр, если он не нулевой, не открывайте другой диалог. Если ноль, тогда только откройте диалоговое окно.
Вы должны попытаться проверить с помощью 'if ()', если
getFragmentManager().findFragmentByTag("dialog");
или
getFragmentManager().findFragmentById("idOfDialog")
верните null, если да, то диалога нет, и вы можете создать новый. Другое решение, которое можно использовать, - «Обработка изменений конфигурации». https://developer.android.com/guide/topics/resources/runtime-changes При этом вы можете поместить своего наблюдателя 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
}
Попробуйте это решение github.com/googlesamples/android-architecture/blob/…