631 Stimmen

Wie implementiert man onBackPressed() in Fragments?

Gibt es eine Möglichkeit, wie wir die onBackPressed() in Android Fragment ähnlich wie in Android Activity implementieren?

Da der Fragment-Lebenszyklus nicht über onBackPressed() . Gibt es eine andere alternative Methode zur Überwindung onBackPressed() in Android 3.0-Fragmenten?

4voto

Parsania Hardik Punkte 4494

Sehr kurze und knappe Antwort:

getActivity().onBackPressed();

Erläuterung des gesamten Szenarios meines Falles:

Ich habe FragmentA in MainActivity, Ich öffne FragmentB aus FragmentA (FragmentB ist ein untergeordnetes oder verschachteltes Fragment von FragmentA)

 Fragment duedateFrag = new FragmentB();
 FragmentTransaction ft  = getFragmentManager().beginTransaction();
 ft.replace(R.id.container_body, duedateFrag);
 ft.addToBackStack(null);
 ft.commit();

Wenn Sie nun von FragmentB zu FragmentA wechseln wollen, können Sie einfach Folgendes eingeben getActivity().onBackPressed(); in FragmentB.

4voto

Divya Punkte 503

Folgen Sie einfach diesen Schritten:

Immer beim Hinzufügen eines Fragments,

fragmentTransaction.add(R.id.fragment_container, detail_fragment, "Fragment_tag").addToBackStack(null).commit();

Dann überschreiben Sie in der Hauptaktivität onBackPressed()

if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
    getSupportFragmentManager().popBackStack();
} else {
    finish();
}

Für die Handhabung der Zurück-Taste in Ihrer App,

Fragment f = getActivity().getSupportFragmentManager().findFragmentByTag("Fragment_tag");
if (f instanceof FragmentName) {
    if (f != null) 
        getActivity().getSupportFragmentManager().beginTransaction().remove(f).commit()               
}

Das war's!

3voto

Alécio Carvalho Punkte 13103

Fragment: Ein BaseFragment erstellen, das eine Methode platziert:

 public boolean onBackPressed();

Tätigkeit:

@Override
public void onBackPressed() {
    List<Fragment> fragments = getSupportFragmentManager().getFragments();
    if (fragments != null) {
        for (Fragment fragment : fragments) {
            if (!fragment.isVisible()) continue;

            if (fragment instanceof BaseFragment && ((BaseFragment) fragment).onBackPressed()) {
                return;
            }
        }
    }

    super.onBackPressed();
}

Ihre Aktivität wird über die angehängten und sichtbaren Fragmente laufen und die onBackPressed() und brechen ab, wenn eine von ihnen 'true' zurückgibt (was bedeutet, dass sie bearbeitet wurde, also keine weiteren Aktionen).

3voto

Deva Punkte 2196

In Aktivität Lebenszyklus, immer Android zurück Taste befasst sich mit FragmentManager Transaktionen, wenn wir FragmentActivity oder AppCompatActivity verwendet.

Um den Backstack zu behandeln, müssen wir nicht die Backstack-Anzahl oder das Tag behandeln, aber wir sollten den Fokus beim Hinzufügen oder Ersetzen eines Fragments behalten. Bitte finden Sie die folgenden Schnipsel, um die zurück-Taste Fälle zu behandeln,

    public void replaceFragment(Fragment fragment) {

        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        if (!(fragment instanceof HomeFragment)) {
            transaction.addToBackStack(null);
        }
        transaction.replace(R.id.activity_menu_fragment_container, fragment).commit();
    }

Hier füge ich keinen Backstack für mein Home-Fragment hinzu, weil es die Startseite meiner Anwendung ist. Wenn addToBackStack zu HomeFragment dann app wird warten, um alle Frament in acitivity zu entfernen, dann werden wir leeren Bildschirm erhalten, so dass ich die folgende Bedingung halten,

if (!(fragment instanceof HomeFragment)) {
            transaction.addToBackStack(null);
}

Jetzt können Sie das zuvor hinzugefügte Fragment auf der Aktivität sehen und die App wird beendet, wenn sie das HomeFragment erreicht. Sie können auch die folgenden Schnipsel betrachten.

@Override
public void onBackPressed() {

    if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
        closeDrawer();
    } else {
        super.onBackPressed();
    }
}

3voto

Muhammad Aamir Ali Punkte 19629

Implementieren Sie nicht die Methode ft.addToBackStack(), damit Ihre Aktivität beendet wird, wenn Sie die Schaltfläche Zurück drücken.

proAddAccount = new ProfileAddAccount();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, proAddAccount);
//fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X