Сохранить фрагмент просмотра, когда стек обратно от Фрагмента B до A (например, закончить в деятельности) - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть два фрагмента ФРАГМЕНТ A и ФРАГМЕНТ B .Когда я иду от ФРАГМЕНТ A к ФРАГМЕНТ B Я добавляю ФРАГМЕНТ A в backstack, используя addtobackstack(null), а также используя replace() метод.Проблема в том, что я звоню popbackstack() из ФРАГМЕНТ В -> ФРАГМЕНТ А , затем OnCreateView() и onViewCreated() снова вызывает и загружает представление переработчика снова в ФРАГМЕНТ А .Я знаю, что все экземпляры не загружаются снова, но проблема в том, что я не хочу загружать просмотр снова.Ex.в действии, когда я вызываю финиш, предыдущая активность остается такой же, как мы ушли.

ПРИМЕЧАНИЕ : я не хочу использовать метод add() в beginTransaction, потому что он перекрывает другой фрагмент.

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Для справки:

Еще одно важное отличие между add и replace заключается в следующем: replace удаляет существующий фрагмент и добавляет новый фрагмент.Это означает, что при нажатии кнопки «Назад» фрагмент, который был заменен, будет создан с вызовом onCreateView.Принимая во внимание, что add сохраняет существующие фрагменты и добавляет новый фрагмент, что означает, что существующий фрагмент будет активным, и они не будут находиться в состоянии «приостановлено», следовательно, при нажатии кнопки «Назад» onCreateView не вызывается для существующего фрагмента (фрагмент, который был там до новогофрагмент был добавлен). В терминах событий жизненного цикла фрагмента onPause, onResume, onCreateView и другие события жизненного цикла будут вызываться в случае замены, но они не будут вызываться в случае добавления.

InСокращенно от вашего варианта использования, вам нужно использовать add, и если вы не хотите, чтобы фрагментированные виды перекрывались, вы можете заменить Fragment B цвет фона представления сплошным цветом вместо прозрачного.

Также не забудьте добавить android:clickable="true" в родительское представление вашего второго фрагмента, чтобы он ловил щелчки, и они не распространялись на фрагмент ниже.Примерно так:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:focusable="true">
0 голосов
/ 16 февраля 2019

Если вы добавляете фрагменты в android.support.v4.app.FragmentManager, вам также нужно вызвать popBackStack () для того же FragmentManager.

Этот код должен решить проблему:

if (getSupportFragmentManager().getBackStackEntryCount() > 0){
    boolean done = getSupportFragmentManager().popBackStackImmediate();
}
...