Ich habe versucht, das aktuelle Fragment mit Imagebutton zu schließen.
Ich bin in Fragment-A und es wird zu Fragment-B, wenn ich auf die Schaltfläche klicke.
Und wenn ich bei Fragment-B auf die Schaltfläche klicke, wird es zu Fragment-C und schließt das Fragment-B.
Wenn ich bei Fragment-C auf die Schaltfläche Zurück klicke, wird wieder Fragment-A angezeigt.
Der Code, den ich ausprobiert habe, lautet wie folgt
camera_album = (ImageButton) view.findViewById(R.id.camera_album);
camera_album.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
closefragment();
Fragment fragment = FileBrowserFragment.newInstance(null, null, null) ;
MainActivity.addFragment(LocalFileBrowserFragment.this, fragment) ;
}
});
private void closefragment() {
getActivity().getFragmentManager().beginTransaction().remove(this).commit();
}
Wenn ich bei Fragment-B auf die Schaltfläche "Zurück" klicke, wird "Fragment-C" angezeigt.
Wenn ich jedoch auf Fragment-C auf die Schaltfläche "Zurück" klicke, wird nicht auf "Fragment-A" zurückgegriffen. Es zurück zum leeren Hintergrund. Wenn ich zu Fragment-A zurückkehren möchte, muss ich erneut auf die Schaltfläche "Zurück" klicken.
Es scheint also, dass das aktuelle Fragment nicht vollständig geschlossen ist.
Wie beende ich das aktuelle Fragment wie den Zurück-Button von Android?
MainActivity.addFragment(LocalFileBrowserFragment.this, fragment)
? Sie müssen das Fragment zu Backstak hinzufügen und es entsprechendAntworten:
Um von Fragment A zu B zu gelangen, ersetzen Sie A durch B und verwenden Sie es
addToBackstack()
zuvorcommit()
.Wenn Sie nun von Fragment B zu C gehen und es zuerst verwenden
popBackStackImmediate()
, wird dies A zurückbringen. Ersetzen Sie nun A durch C, genau wie bei der ersten Transaktion.quelle
Ich ändere den Code von
getActivity().getFragmentManager().beginTransaction().remove(this).commit();
zu
Und es kann das Fragment schließen.
quelle
Für diejenigen, die einen einfachen Weg finden müssen
Versuchen
getActivity().onBackPressed();
quelle
popBackStack()
undpopBackStackImmediate()
sind direktere Möglichkeiten, das oberste Fragment zu platzen, ohne einen Knopfdruck zu simulieren. Verwenden vononBackPressed()
TriggernOnBackPressedCallback
s; Wenn Sie in Zukunft speziell das Drücken von Zurück-Tasten behandeln möchten, müssen Sie zupopBackStack()
/ wechseln, umpopBackStackImmediate()
zu vermeiden, dass die Rückrufe programmgesteuert ausgelöst werden.getActivity().onBackPressed
tut alles was du brauchst. Es ruft automatisch die onBackPressed- Methode in der übergeordneten Aktivität auf.quelle
Versuche dies:
Wenn Sie also die Zurück-Taste drücken , lädt die aktuelle Aktivität (die mehrere Fragmente enthält) das vorherige Fragment, anstatt sich selbst zu beenden.
quelle
Dies ist eine Kotlin-Methode. Ich habe eine Schaltfläche im Fragment-Layout erstellt und dann onClickListner in onViewCreated festgelegt.
quelle
Versuche dies:
quelle
Sie können diese Logik ausprobieren, weil sie für mich funktioniert.
quelle
quelle
Wenn Sie die Aktion mit der Zurück-Schaltfläche genauer ausführen müssen, können Sie die folgende Methode verwenden:
quelle
In Ihren Fragmenten können
onCreateView(...)
Sie eine Ansicht durch Aufrufen entfernencontainer.removeView(view);
. Wenn Sie also das Fragment entfernen möchten,view
sollte der Rückgabewert vononCreateView
, sein.beispielsweise
quelle
Dies ist der beste Weg, dies zu tun, da wir in einer Aktivität sind
Gibt die Aktivität an, in der sich das Fragment befand. Wenn Sie also die Funktion finish () für diese Aktivität aufrufen , können Sie das Fragment beenden.
quelle
Probier diese
quelle