Как добавить вложенный фрагмент в backstack в пейджере с вкладками? - PullRequest
0 голосов
/ 30 апреля 2018

Мое приложение содержит две вкладки, внутри двух вкладок каждая вкладка имеет 4-5 вложенных фрагментов, внутри вложенных фрагментов addtobackstack не работает? Как я могу добавить вложенные фрагменты в backstack, потому что когда я нажимаю кнопку «Назад» внутри вложенных фрагментов, мое приложение закрывается, это означает, что он вызывает метод super.onBackKeyPressed.

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Добавьте этот код в вашу деятельность

public void onBackPressed() {
    FragmentManager fm = getSupportFragmentManager();
    if (fm.getFragments() != null) {
        for (Fragment frag : fm.getFragments()) {
            if (frag.isVisible()) {
                FragmentManager chilFrag = frag.getChildFragmentManager();
                if (chilFrag.getBackStackEntryCount() > 0) {
                    chilFrag.popBackStack();
                    return;
                }
            }
        }
     }
    super.onBackPressed();
}
0 голосов
/ 30 апреля 2018

Используйте ChildFragmentManager и проверьте, имеет ли активная вкладка BackStackEntry, если это так, тогда откройте backstack, иначе вызовите super.onBackKeyPressed

полное описание на этот ответ: https://stackoverflow.com/a/37961649/4832356

0 голосов
/ 30 апреля 2018

Вы должны использовать ChildFragmentManager

Это функция замены фрагмента.

fun replace(fragment: Fragment){
  childFragmentManager
    .beginTransaction()
    .replace(R.id.fragmentContainer, fragment)
    .commit()
}

И переопределить метод onBackPressed в большинстве родительских фрагментов.

override fun onBackPressed() {
val pop = childFragmentManager.popBackStackImmediate()
if (!pop){
  super.onBackPressed()
}

}

Я написал с kotlin, я надеюсь, вы понимаете. Если вам нужна дополнительная информация, пожалуйста, спросите меня.

...