Вызов метода в Popbackstack()

#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() вашего фрагмента.