FragmentTransaction tut nichts

8

Ich lerne Fragmente und unten ist mein erstes Fragment-Programm. Ein einfaches Projekt, wo ich 2 Bildschirme habe. Wenn ich auf die nächste Schaltfläche des ersten Bildschirms klicke, muss die zweite Schaltfläche angezeigt werden.

Ich ziele auf Android 2.1 und höher und mit dem Kompatibilitätspaket

AppMainFragmentActivity.java

%Vor%

app_main_layout.xml

%Vor%

ErstesFragment.java

%Vor%

erste_fragment_layout.xml

%Vor%

SecondFragment.java

%Vor%

zweite_fragment_layout.xml

%Vor%

Nun, ich bekomme den ersten Bildschirm gut. Jetzt,

Was ich von meinem Verständnis von Fragment

erwartet hatte
  • Wenn ich in Bildschirm 1 auf die Schaltfläche Weiter klicke, wird SecondFragment erstellt. Sein onCreate() und onCreateView() wird aufgerufen.
  • SecondFragment wird angezeigt und FirstFragment wird zerstört (seit ich bin nicht zu Backstack hinzufügen). Es wird keine Animation mehr geben Standardfragmenttransaktion hat keine Animation.

Was passiert

?
  • SecondFragment wird in Ordnung erstellt, seine onCreate() und onCreateView() werden aufgerufen.
  • Aber FirstFragment bleibt auf dem Bildschirm und der zweite wird nie angezeigt.

Jetzt kann mein Verständnis von Fragment falsch sein. Aber ich glaube, wenn wir eine Fragmenttransaktion committen (), sollte das erste Fragment durch das zweite ersetzt werden (das erste wird entweder versteckt oder zerstört). Nun scheint nichts zu passieren. Warum das? Sollten wir das erste Fragment manuell zerstören / verstecken?

Hinweis: Ich weiß, dass es eine lange Frage für solch eine grundlegende Sache ist. Aber ich habe meinen gesamten Code eingegeben, da ich nicht sicher bin, wo ich es vermasselt habe.

    
Krishnabhadra 14.09.2012, 04:18
quelle

3 Antworten

10

Nun, ich habe es funktioniert. Beide Antworten auf diese Fragen geben einen Grund dafür, dass mein Code nicht wie erwartet funktioniert. Aber es gab 2 Fehler in meinem Code.

mit fragmentTransaction.add() wird kein neues Fragment über das alte angezeigt. Sie müssen ersetzen (). Die Antworten waren richtig.

Aber es gab einen weiteren Fehler in meinem Code. Sie können ein statisch in XML erstelltes Fragment nicht ersetzen. Also habe ich

geändert

app_main_layout.xml

%Vor%

und

AppMainFragmentActivity.java

%Vor%     
Krishnabhadra 18.09.2012, 12:34
quelle
6

Haben Sie versucht, ft.replace (R.id.fragment_container, fragment) anstelle von add zu verwenden? Hinzufügen wird das vorhandene Fragment nicht entfernen.

    
Sujai Kamat 14.09.2012 04:44
quelle
2

Sie versuchen, ein weiteres Fragment in fragment_container hinzuzufügen. Es wird hinzugefügt, aber Ihr Fragment ist nicht sichtbar, weil Sie für id_first_fragment Breite und Höhe als fill_parent angegeben haben. Versuchen Sie daher, den Inhalt von wrap_content für das Fragment id_first_fragment festzulegen. Sie können das nächste Fragment sehen, wenn Sie auf die Schaltfläche klicken. Wenn Sie das erste Fragment schließen und das zweite anzeigen möchten, müssen Sie anstelle von add ersetzen.

    
Nagarajan 14.09.2012 04:55
quelle