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?

2voto

Sudarshan Punkte 830

Verwenden Sie in Ihrem Fragment einfach

 requireActivity().onBackPressed();

Zur Handhabung klicken Sie auf Hinzufügen binding.actionABack.setOnClickListener(v -> requireActivity().onBackPressed());

2voto

Shervin Gharib Punkte 728

Beste Lösung,

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;

public class BaseActivity extends AppCompatActivity {
    @Override
    public void onBackPressed() {

        FragmentManager fm = getSupportFragmentManager();
        for (Fragment frag : fm.getFragments()) {
            if (frag == null) {
                super.onBackPressed();
                finish();
                return;
            }
            if (frag.isVisible()) {
                FragmentManager childFm = frag.getChildFragmentManager();
                if (childFm.getFragments() == null) {
                    super.onBackPressed();
                    finish();
                    return;
                }
                if (childFm.getBackStackEntryCount() > 0) {
                    childFm.popBackStack();
                    return;
                }
                else {

                    fm.popBackStack();
                    if (fm.getFragments().size() <= 1) {
                        finish();
                    }
                    return;
                }

            }
        }
    }
}

1voto

Ask Shiwa Punkte 163

Wenn Fragment und verwendeter NavController einfach aufrufen

findNavController().popBackStack()

1voto

Haider Malik Punkte 1149

Ok Leute, ich habe endlich eine gute Lösung gefunden.

In Ihrem onCreate() in Ihrer Aktivität Gehäuse Ihre Fragmente fügen Sie einen Backstack ändern Listener wie folgt:

    fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            List<Fragment> f = fragmentManager.getFragments();
            //List<Fragment> f only returns one value
            Fragment frag = f.get(0);
            currentFragment = frag.getClass().getSimpleName();
        }
    });

(Auch das Hinzufügen meiner fragmenManager ist in den Aktivitäten deklariert O Nun wird jedes Mal, wenn Sie das Fragment wechseln, der aktuelle Fragment String zum Namen des aktuellen Fragments. Dann in den Aktivitäten onBackPressed() können Sie die Aktionen der Schaltfläche "Zurück" wie folgt steuern:

    @Override
    public void onBackPressed() {

    switch (currentFragment) {
        case "FragmentOne":
            // your code here
            return;
        case "FragmentTwo":
            // your code here
            return;
        default:
            fragmentManager.popBackStack();
            // default action for any other fragment (return to previous)
    }

}

Ich kann bestätigen, dass diese Methode bei mir funktioniert.

1voto

b0b Punkte 444

Tun Sie es einfach in onKeyUp() :

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {

    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // do something
        return true;  // return true if back handled, false otherwise
    }

    return super.onKeyUp(keyCode, event);
}

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