Fragment ersetzen und vom BackStack entfernen

  • Antworten:3
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 2.492

28.01.2016, 21:47:56 via Website

Hallo,

ich habe ein "Main-Fragment", das Hauptmenü (m). Von da aus starte ich zu Beginn ein Fragment, nennen wir es f1.
Das mache ich mit:

.add(fragment...).addToBackStack(null).commit();

Aus f1 soll man also mit Zurück wieder zum Hauptmenü kommen.
Von f1 kann man aber auch zu f2. Das habe ich mit:

.replace(fragment...).addToBackStack(null).commit();

Wenn man in f2 ist, soll ein Klick auf Zurück aber direkt zum Hauptmenü führen. Es soll also das f1 wirklich ersetzen. Ein anschließender Klick öffnet dann wieder f2. (Es ist die gleiche Fragment-Klasse nur mit anderen Parametern).
Das Problem ist jetzt folgende Reihenfolge:
m -> f1 -> f2 -> Zurück -> m -> f2 -> f3 -> Zurück -> f2 -> f1 -> m
Bei dem Zurück soll er ja eigentlich direkt zum Menü. Hat einer eine Idee was das Problem ist? Das replace scheint nicht so zu arbeiten, wie ich es mir vorgestellt habe.

Das .addToBackStack(null) fügt das, das aktuelle Fragment, oder das Fragment welches aktuell hinzugefügt wird auf den BackStack?

— geändert am 28.01.2016, 21:56:25

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

28.01.2016, 22:07:38 via App

AddToBackStack fügt das neu hinzugefügte Fragment zum BackStack hinzu.
Jetzt gibt es 2 moglichkeiten:

  1. Du entfernst das alte Fragment aus dem BackStack. Da musst du nen steing als Tag festlegen
  2. Du überschreibst in fragment2 die onBackPressed und gehst direkt zur main zurück.

LG Pascal //It's not a bug, it's a feature. :) ;)

Lars.

Antworten
  • Forum-Beiträge: 2.492

28.01.2016, 22:35:02 via Website

Finde zwar das Überschreiben der onBackPressed() irgendwie nicht schön, aber so funktioniert es, danke dafür. Aber die muss man in der Activity überschreiben und nicht im Fragment ;)

— geändert am 28.01.2016, 22:35:12

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

28.01.2016, 23:56:51 via App

Das stimmt war nen Denkfehler drin ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten

Empfohlene Artikel