#android #android-fragments #fragment
Вопрос:
Я заменяю Фрагмент-A на Фрагмент-B, и при вызове функции popbackstack() во фрагменте-B я перенаправлю обратно во Фрагмент-A. Поэтому я хотел вызвать метод, который обновит список.
Ответ №1:
Еще одно важное различие между добавлением и заменой заключается в следующем: замена удаляет существующий фрагмент и добавляет новый фрагмент. Это означает, что при нажатии кнопки «Назад» замененный фрагмент будет создан с вызовом его onCreateView. В то время как add сохраняет существующие фрагменты и добавляет новый фрагмент, это означает, что существующий фрагмент будет активен, и они не будут находиться в состоянии «приостановлено», следовательно, при нажатии кнопки «Назад» onCreateView не вызывается для существующего фрагмента(фрагмент, который был там до добавления нового фрагмента). С точки зрения событий жизненного цикла фрагмента onPause, onResume, onCreateView и другие события жизненного цикла будут вызваны в случае замены, но они не будут вызваны в случае добавления.
Короче говоря, в вашем случае вам нужно использовать add, и если вы не хотите, чтобы представления фрагментов перекрывались, вы можете заменить цвет фона представления фрагмента B сплошным цветом вместо прозрачного.
Когда вы добавляете свой фрагмент, вы также должны добавить его в резервную копию своего фрагмента.
FragmentTransaction ft = getSupportFragmentManager.beginTransaction();
ft.replace(R.id.content, fragment, backStateName);
ft.addToBackStack(backStateName);
ft.commit();
(здесь R. id.контент-это ваш контейнер фрагментов в вашей деятельности)
Затем вы должны переопределить метод onBackPressed в своем действии, содержащем ваши фрагменты.
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
getSupportFragmentManager().popBackStack();
}
}
если вы хотите настроить свой onBackPressed, вы можете проверить, есть ли ваш текущий видимый фрагмент в вашей активности, и создать обратный вызов для выполнения действия для этого конкретного фрагмента. пример —
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.content);
if (fragment instanceof FragmentB) {
((FragmentB) fragment).onBackPressed();
// getSupportFragmentManager().popBackStack();
}
}
теперь вы можете добавить getSupportFragmentManager().popBackStack(); в методе onBackPressed() вашего фрагмента.