Springen Sie einige Fragmente aufBackPressed

Ich bin ziemlich neu mit Android-Fragmenten, also bitte ertragen Sie es mit mir.

Ich habe eine Reihe von Fragmenten, die eine einzelne Aktivität als Host verwenden.

einer Meinung nach sind meine Fragmente nach Abschnitten gruppiert, obwohl sie durch Code immer noch modular / wiederverwendbar sind. Betrachten Sie dieses gewünschte Szenario:

Frag1 -> (Weiter drücken) -> Frag2 -> (Weiter drücken) -> Frag3 -> (Zurück drücken) -> Frag1

Nachdem ich eine Reihe von Fragmenten durchgearbeitet habe, möchte ich einige frühere Fragmente überspringen (in diesem Szenario Frag 2 überspringen), indem ich die Zurück-Taste drücke.

In meinem aktuellen Code besteht jedoch das Problem, dass Frag3 nicht vom Bildschirm verschwindet, obwohl es auf Frag1 zurückgeht. Was passiert ist, dass sowohl Frag1 als auch Frag3 übereinander sichtbar werden.

Hier sind meine relevanten Code-Schnipsel:

Code-Snippet zum Erstellen von 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();
}

Code-Snippet zum Erstellen von 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();
}

Code-Snippet zum Erstellen von 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();
}

Meine aktuelle Problemumgehung hierfür ist das Hinzufügen von.addToBackStack(null) beim Erstellen von Frag3 und Ausführen dieses Codes

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

right nach dem Aufruf der onBackPressed () -Methode. Leider ist diese Problemumgehung hässlich, da Frag2 in Sekundenbruchteilen angezeigt wird, bevor Sie zu Frag1 wechseln.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage