Hinzufügen von Fragmenten zu einem Layout

8

Ich versuche, meine App tabletfreundlicher zu machen, und versuche daher, Fragmente zu lernen. Ich möchte das typische Zwei-Fenster-Layout, wobei die linke Seite die "Navigation" ist, und Sie auf eines der Elemente klicken, und es ändert das Fragment auf der rechten Seite.

Ich kann die Tutorials kopieren, die ein ListFragment für die linke Seite verwenden, und wenn Sie auf eine davon klicken, wird das Fragment "Details" auf der rechten Seite aktualisiert.

Ich habe versucht, diesen Code so gut wie möglich zu duplizieren, und benutze einfach ein LinearLayout mit Schaltflächen für die linke Seite. Wenn eine Schaltfläche angeklickt wird, wird das entsprechende Fragment rechts geladen, aber es funktioniert nicht . Wenn ich die FragmentTransaction festschreibe, bekomme ich java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. Was ist der Elternteil des Kindes, und warum muss ich removeView darauf aufrufen?

Ich versuche, das Fragment in ein FrameLayout zu laden, aber ich habe gerade versucht, ein anderes Fragment im Layout zu ersetzen, und bekomme trotzdem den Fehler.

Idealerweise möchte ich, dass das linke Fragment den ganzen Bildschirm einnimmt, bis eine Taste gedrückt wird, die ein Fragment von links benötigt, aber ein Problem nach dem anderen, nehme ich an.

Code

Hauptaktivität

%Vor%

SelectorFragment (linke Seite)

%Vor%

DetailsFragment

%Vor%

main.xml

%Vor%     
coreno 10.02.2012, 14:28
quelle

2 Antworten

12

Wenn Sie eine Layout-XML-Datei inflationieren, geben Sie nicht die übergeordnete Ansicht an. Es klingt sehr kontraintuitiv, nicht anzugeben, wo Sie diese aufgeblähte Ansicht platzieren, aber es funktioniert.

Ändern Sie beispielsweise in Ihrem SelectorFragment die Zeile:

%Vor%

bis

%Vor%

oder noch besser

%Vor%

Vergessen Sie nicht, das Gleiche auch in Ihrem DetailsFragment zu tun.

    
Alex Curran 10.02.2012, 14:54
quelle
8

Wenn Sie ein Layout innerhalb der getView-Methode eines Fragments aufblasen, müssen Sie die nächste Methode zum Aufblasen verwenden: inflater.infllate (R.layout.details, container, false );

Der Schlüssel ist der dritte Parameter. Es muss falsch sein, das aufgeblähte Layout nicht an den Container anzuhängen, weil das System es bereits getan hat. Wenn es wahr ist oder nicht angezeigt wird, wird eine redundante Gruppenansicht erstellt.

    
Dani 26.07.2012 19:18
quelle

Tags und Links