Пропустить фрагменты на BackPressed (добавить / скрыть)

Я использую fragmentTransaction для обработки фрагментов, это выглядит так:

        FragmentManager fm = oldFragment.getFragmentManager();
        FragmentTransaction fragmentTransaction = fm.beginTransaction();
        fragmentTransaction.add(oldFragment.getId(), newFragment, tag);
        fragmentTransaction.hide(oldFragment);
        fragmentTransaction.addToBackStack(tag);
        fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        fragmentTransaction.commit();

Имея несколько фрагментов, я хочу пропустить некоторые из них при возвращении.

Пример:

Frag1 -> (Нажмите Next) -> Frag2 -> (Нажмите Next) -> Frag3 -> (Нажмите Back) -> Frag1

Это решение работает, когда я использую заменить вместо добавить и скрыть.

getFragmentManager().popBackStack(
    tag, 
    FragmentManager.POP_BACK_STACK_INCLUSIVE);

Ссылка` Пропустить некоторые фрагменты на BackPressed

Но в моем случае пропущенные фрагменты показываются ненадолго. Как я могу сделать так, чтобы фрагментов между ними никогда не было?


person Belzebub    schedule 20.06.2016    source источник
comment
Не знаю, правильно ли я понимаю, но вы пытались использовать fragmentTransaction.remove (FRAGMENT_YOU_NEED); и сделай это дважды   -  person Francisco Castro    schedule 20.06.2016
comment
По-прежнему есть проблема с анимацией   -  person Belzebub    schedule 23.06.2016
comment
ок, а фрагменты удалили? это просто анимация?   -  person Francisco Castro    schedule 23.06.2016
comment
Да, все работает правильно, фрагменты удалены, но промежуточные фрагменты отображаются ненадолго   -  person Belzebub    schedule 24.06.2016


Ответы (1)


Я использую эту функцию для удаления фрагментов, скажите, помог ли я.

public static void removeFragment(FragmentActivity activity) {
    try {
        FragmentManager supportFragmentManager = activity.getSupportFragmentManager(); // getFragmentManager();
        FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
        fragmentTransaction.setCustomAnimations(R.anim.slide_down, R.anim.slide_up);
        fragmentTransaction.remove(supportFragmentManager.getFragments().get(0));

        try {
            fragmentTransaction.commit();

        } catch (Exception e) {
        }
        supportFragmentManager.popBackStack();

    } catch (NullPointerException exception) {
        exception.printStackTrace();
    }
}
person Francisco Castro    schedule 24.06.2016
comment
Нет метода getFragments (). (min api - 19, я не пользуюсь поддержкой) - person Belzebub; 27.06.2016
comment
можете ли вы заменить это на supportFragmentManager.findFragmentByTag (TAG)? проверьте, работает ли это - person Francisco Castro; 27.06.2016