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

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

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

На мой взгляд, мои фрагменты сгруппированы по разделам, хотя они все еще являются модульными / повторно используемыми по коду. Рассмотрим этот желаемый сценарий:

Frag1 -> (Нажмите Далее) -> Frag2 -> (Нажмите Далее) -> Frag3 -> (Нажмите Назад) -> Frag1

Пройдя серию фрагментов, я хотел бы пропустить некоторые предыдущие фрагменты (в этом случае пропустите Frag 2) при нажатии кнопки «Назад».

Однако в моем текущем коде моя проблема заключается в том, что, несмотря на то, что он возвращается к Frag1, Frag3 не исчезает с экрана. Что происходит, так это то, что и Frag1, и Frag3 становятся видимыми друг над другом.

Вот мои соответствующие фрагменты кода:

Фрагмент кода для создания Frag1

@Override
public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments
    // init the fragment (with a default fragment, not null)
    Fragment fragment = PlaceholderFragment.newInstance(position + 1);
    // Position number from navigation sidebar starts from 0.
    // Since position starts from 0, add 1 to match section number
    // as implemented in {@link #onSectionAttached()}
    switch(position) {
        case 0:
            fragment = PlaceholderFragment.newInstance(position + 1);
            break;
        case 1: // Frag1 case
            fragment = new AddPointsFragment().newInstance(position + 1, "");
            break;
        default:
            break;
    }
    // update the main content by replacing fragments
    FragmentManager fragmentManager = getFragmentManager();
    // clear all fragments from previous section from the back stack
    fragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    // replace all currently added fragments in container and replace with the new fragment
    fragmentManager.beginTransaction()
            .replace(R.id.container, fragment)
            .commit();
}

Фрагмент кода для создания Frag2

public void onEnterButtonFragmentInteraction(int sectionNumber, String cardNo) {
    // TODO: Add point for given card number
    int points = 5; //sample points
    AddPointsSuccessFragment addPointsSuccessFragment =
            new AddPointsSuccessFragment().newInstance(sectionNumber, cardNo, points);
    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.container, addPointsSuccessFragment)
            .addToBackStack(null)
            .commit();
}

Фрагмент кода для создания Frag3

public void onOkButtonFragmentInteraction(int sectionNumber, String cardNo, int points) {
    RedeemRewardFragment redeemRewardFragment =
                new RedeemRewardFragment().newInstance(sectionNumber, cardNo, points);
        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.container, redeemRewardFragment);
        fragmentTransaction.commit();
}

Мой текущий обходной путь для этого, добавив.addToBackStack(null) в создании Frag3 и запуске этого кода

public void onBackButtonFragmentInteraction() {
    this.onBackPressed(); // simulate pressing of activity back button
    FragmentManager fragmentmanager = getFragmentManager();
    fragmentmanager.popBackStack(); // pop Frag2 from back stack
}

сразу после вызова метода onBackPressed (). К сожалению, этот обходной путь является уродливым, поскольку из-за доли секунды Frag2 появляется перед переходом к Frag1.

Ответы на вопрос(3)

Ваш ответ на вопрос