Я работаю над приложением для Android со многими диалогами, каждый из которых расширяет пользовательский класс под названием «DialogFragmentBase», который расширяет «DialogFragment» библиотеки. Все действия используют метод show(), переопределенный в DialogFragmentBase.
Я хочу предотвратить отображение диалогов, если родительская активность находится в фоновом режиме (например, при получении телефонного звонка), поскольку это приводит к недопустимому StatEException, но в то же время я не хочу охранять каждый вызов show() в приложении с помощью:
if(getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED))
Итак, я хотел сделать что-то подобное в DialogFragmentBase:
@Override
public void show(FragmentManager manager, String tag){
List<Fragment> fragments = manager.getFragments();
if(fragments != null && fragments.size() > 0){
FragmentActivity activity = fragments.get(fragments.size()-1).getActivity();
if(activity != null && activity.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)){
super.show(manager, tag);
}
}
}
Итак, мой вопрос: считается ли такой доступ к предыдущему фрагменту плохой практикой? Это работает... но я помню, что где-то читал, что фрагменты не должны взаимодействовать. Если это действительно плохая практика, что было бы лучшим решением, которое можно было бы реализовать в DialogFragmentBase (чтобы избежать добавления охранников повсюду).
Примечание. Я попробовал решение onSaveInstanceState, описанное здесь, но, поскольку DialogFragment еще не показан, onSaveInstanceState не призывал к этому в тот момент. Также getActivity() возвращает null, так как onAttach еще не вызывался в этот момент.
Спасибо!