Wie kann ich ein neues Fragment auf einer einzelnen Registerkarte anzeigen?

8

Ich erstelle drei Tabs, die jeweils ein Fragment enthalten. Nun möchte ich das erste Tab-Fragment durch ein neues Fragment im selben Tab ersetzen. Wie kann ich das tun, wenn der Tab gleich bleibt?

Mein Code -

Tab_Widget.java

%Vor%

main_activity.java

%Vor%

main_fragment.java

%Vor%

Mein XML

mainfragment.xml

%Vor%

Damit wird das Fragment zweifellos aufgerufen, aber es überlappt das vorherige Fragment.

    
Lalit Poptani 01.08.2011, 06:22
quelle

3 Antworten

7

Sie haben eine Struktur wie folgt:

%Vor%

Innerhalb von MainFragment versuchen Sie, den Inhalt seines Containers (selbst) zu ersetzen.

Am besten wäre es, wenn das MainFragment eine angepasste TabActivity aufruft, die wiederum einen replace auf ihrem Container aufruft, entweder so (was wahrscheinlich dasselbe Problem verursacht, da es im Grunde denselben Code von demselben Ort aus ausführt , aber es sollte dir eine grundlegende Vorstellung davon geben, was ich vorschlage):

%Vor%

Wenn das nicht funktioniert, versuchen Sie es mit einer ähnlichen Sache, aber anstatt die Aktivität direkt aufzurufen, übergeben Sie Befehle über Intents & amp; Aktionen (oder Bündel), die Informationen darüber enthalten, an welchen Container welcher geändert werden soll.

Ich hätte lieber gesagt / warum / Fragmente funktionieren nicht gut mit Fragment-in-Fragment und verwandten Feinheiten: Überprüfen Sie hier , um zu sehen, warum ich vorhabe, Fragmente aus der Kontrolle von Fragmenten herauszuschneiden.

    
Graeme 03.08.2011, 14:24
quelle
5

OK, mehrere Dinge:

  1. Sie müssen nicht ersetzen und entfernen. Effektiv ersetzen, entfernt nur das erste Fragment und fügt das zweite an seiner Stelle hinzu.

  2. Ich vermute, dass Ihre Argumente für den Befehl zum Ersetzen falsch sind. Dies ist die richtige Form:

    %Vor%

    Sie scheinen die ID des Fragments selbst zu passieren und nicht die ID des Containers. Der Befehl replace übernimmt die ID der Containeransicht und entfernt alle Fragmente in diesem Container, bevor ein neuer hinzugefügt wird. Also wenn das dein Layout wäre:

    %Vor%

    Sie würden verwenden:

    %Vor%

    und nicht

    %Vor%
  3. Da Sie findFragmentById(R.id.main_fragment) versuchen, vermute ich, dass Sie dieses Fragment zu Ihrer XML-Layoutdatei hinzugefügt haben. Wenn Sie ein Fragment direkt in der XML-Datei hinzugefügt haben, können Sie es zur Laufzeit nicht programmgesteuert entfernen. Um Fragmente zu entfernen oder zu ersetzen, müssen Sie sie zur Laufzeit mit einer FragmentTransaction hinzugefügt haben.

BEARBEITEN:

Die Zahlen 2 und 3 meiner ursprünglichen Antwort gelten immer noch. Sie müssen die ID der enthaltenen ViewGroup zum Hinzufügen und Ersetzen verwenden. In diesem Fall ist das Ihr LinearLayout, R.id.Maincontainer, nicht R.id.main_fragment.

Wie bereits erwähnt, können Sie Fragmente, die Sie direkt in die XML-Datei eingefügt haben, nicht entfernen. Ihr main_fragment wird im XML hinzugefügt und kann daher zur Laufzeit nicht entfernt werden.

Versuchen Sie dies für Ihre mainfragment.xml:

%Vor%

Und das für Ihre main_fragment-Klasse:

%Vor%     
theisenp 02.08.2011 13:26
quelle
0

@theisenp Ich erstelle eine Registerkartenansicht, in der, wenn eine Schaltfläche geklickt wird, sie zu einem anderen Bildschirm wechseln muss, wenn ich versuche, es mit dem obigen Code zu implementieren, wechselt sie zu einem anderen Bildschirm, aber die Schaltfläche ist weiterhin mit dem nächsten Bildschirm sichtbar Ich möchte den nächsten Bildschirm sollte den gesamten Bildschirm abdecken

%Vor%

    
Ghouse 16.01.2012 09:23
quelle

Tags und Links