вызовите результат popBackStack более одного раза в onBackPressed - PullRequest
0 голосов
/ 25 апреля 2018

Мое приложение имеет этот поток

Activity (TabLayout) -> Fragment 1 -> Fragment 2 -> Fragment 3

Когда я снова нажимаю на Фрагмент 2 или Фрагмент 3, я уже возвращаюсь к Фрагменту 1. Я хочу вернуться к Фрагменту 2, если я нахожусь на Фрагменте3.

От фрагмента 1 к фрагменту 2

Frag2 childFrag = new Frag2();
getChildFragmentManager().beginTransaction().add(R.id.frag2_frame, childFrag)
    .addToBackStack(null)
    .commit(); 

От фрагмента 2 к фрагменту 3

Frag3 childFrag = new Frag3();
getChildFragmentManager().beginTransaction().add(R.id.frag3_frame, childFrag)
    .addToBackStack(null)
    .commit(); 

onBackPressed in Activity

// a fragments list for tablayout
ArrayList<Fragment> fragments = new ArrayList<>();    

public void onBackPressed(){
    fragments.get(selectedTab).getChildFragmentManager().popBackStack();
}

Ответы [ 3 ]

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

Как только фрагмент 1 будет добавлен в действие, я думаю, вам нужно будет использовать getChildFragmentManager() для добавления дополнительных фрагментов из фрагмента . Этот метод доступен для классов, расширяющих фрагмент.


Редактировать


Как вы сказали, вы используете getChildFragmentManager(), я бы использовал .beginTransaction().replace(...) вместо .beginTransaction().add(...).

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

Попробуйте найти самый глубокий фрагмент. Тогда popBackStack прямо там.

List<Fragment> fs2 = fragments.get(selectedTab).getChildFragmentManager().getFragments().get(0).getChildFragmentManager().getFragments();
FragmentManager f = fragments.get(selectedTab).getChildFragmentManager();
while (fs2.size() > 0) {
    fs2 = fs2.get(0).getChildFragmentManager().getFragments();
    f = f.getFragments().get(0).getChildFragmentManager();
}
f.popBackStack();
0 голосов
/ 25 апреля 2018

Попробуйте добавить backStack

Frag2 childFrag = new Frag2();
getFragmentManager().beginTransaction().add(R.id.frag2_frame, childFrag)
    .addToBackStack("Frag2 ")
    .commit(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...