Замена текущего фрагмента удалением предыдущего - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно иметь возможность просматривать фрагменты следующим образом: A-> B-> C1 Когда я нахожусь на C1 Мне нужно заменить его на C2, но когда я нажимаю назад, мне нужно вернуться к B вместо C1 .Я могу сделать это следующим образом:

    String tag = fragment.getClass().getName();
    FragmentManager manager = getSupportFragmentManager();
    manager.popBackStack();
    FragmentTransaction ft = manager.beginTransaction();
    ft.replace(R.id.mainActivity_container, fragment, tag);
    ft.addToBackStack(tag);
    ft.commit();

Проблема в том, что при переходе с C1 на C2 , фрагмент B получает метод onCreateInnerView .

Мне нужно иметь возможность сделать что-то вроде этого: A-> B-> C1-> C2-> C1->C2 и, нажав обратно C2 , я должен перейти к B

Как выполнить замену без воссоздания фрагмента B ?

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Попробуйте, это может вам помочь, просто замените две строки,

  manager.popBackStack();//Remove this line
  ft.replace(R.id.mainActivity_container, fragment);//Remove 3rd param in this line
  ft.addToBackStack(tag);//Remove this line

EDITED
, вы также можете попробовать это

 public void switchContent(Fragment fragment) {

    FragmentManager fragmentManager = getSupportFragmentManager();

    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();  

     for (int i = 0; i < fragmentManager.getBackStackEntryCount(); ++i) {
     Fragment currentFragment = this.getSupportFragmentManager().findFragmentById(R.id.mainActivity_container);
        if(currentFragment != B){
        fragmentManager.popBackStack();
        }
    }
    fragmentTransaction.replace(R.id.mainActivity_container, fragment).commit();
}
0 голосов
/ 06 июня 2018

Вы можете обрабатывать событие onBackPressed () и заменять любой текущий фрагмент на фрагмент B.

0 голосов
/ 05 июня 2018

Первое, что вам не нужно popupstack при переходе к фрагменту.Потому что он вызовет метод вашего последнего стека onViewCreated.

При переходе к B -> C1 , B -> C2 и C1 ->C2 :

  • Нужно добавить Back stack null
  • Удалить popupbackstack

Надеюсь, это сработает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...