Separate Zurück-Navigation für einen Tabbed View Pager in Android

8

Was ich will.

In einem Tab-Sliding-Menükontext möchte ich ein Fragment in einem Tab ersetzen und das Tab-Menü sowie das aktuelle Tab beibehalten. Wenn ich zu einer anderen Registerkarte wechsle und zum Original zurückkehre, möchte ich, dass das letzte Fragment angezeigt wird.

Ich habe zum Beispiel tab_a mit Fragment_1 , tab_b mit Fragment_4 und tab_c mit Fragment_7 . Jetzt möchte ich eine Schaltfläche in Fragment_1 , die mich Fragment_2 öffnet, aber ich möchte in der Lage sein, zu den Fragmenten von tab_b und tab_c zu wischen. Und wenn ich zu Tab_a zurückkehre, muss Fragment_2 angezeigt werden.

%Vor%

Meine aktuelle Haupttätigkeit.

Xml

%Vor%

Code

%Vor%

Fragmente

Xml

%Vor%

Code

%Vor%

Bearbeiten:

Ich habe einige Lösungen, aber keine ist perfekt. Wenn ich ein Frollelayout in MainActivity anlege, wird Fragment_1 korrekt in Fragment_2 ersetzt, aber auch in tab_b und tab_c . Wenn das FrameLayout in Fragment_1 ist, kann ich die anderen Tabs richtig streichen, aber die Ersetzung geht nicht gut, weil Fragment_2 geöffnet ist, aber auch Fragment_1 ist da.

    
Santiago Gil 18.08.2016, 10:22
quelle

3 Antworten

2

Sie können ViewPager zusammen mit TabLayout verwenden.

%Vor%

Erstellen Sie dann eine Klasse, die FragmentStatePagerAdapter erweitert, um ViewPager mit Ihrer anfänglichen Fragment s zu initialisieren:

%Vor%

Die Fragmente, die den tatsächlichen Inhalt enthalten, sollten von einem HostFragment umschlossen werden, das sein Kind FragmentManager verwendet, um das aktuelle Fragment durch ein neues zu ersetzen, oder um das letzte Fragment aus dem Fragmentstapel zu entfernen . Rufen Sie replaceFragment zum Navigieren auf:

%Vor%

Das HostFragment sollte die abstrakte Klasse BackstackFragment

erweitern %Vor%

Verdrahte alles in MainActivity :

%Vor%

Diese Lösung ist sicherlich nicht perfekt, aber erledigt die Arbeit. Lesen Sie mehr darüber in meinem Blogpost zum Thema.

    
marktani 23.08.2016, 20:47
quelle
3

Basierend auf dem, was Sie erklärt haben, implementiere ich Folgendes:

1- Erstellen Sie in Ihrer Aktivität Tabs und ViewPager :

%Vor%

2- Erstellen Sie in jedem Tab ViewPager (Ich nehme an, Sie wollen Tabs innerhalb von tabs , wenn Sie keine Tabs brauchen, entfernen Sie sie einfach). Die Implementierung jedes fragment wäre etwa wie folgt:

%Vor%

Auch im Fragment erstellen Sie einen Button, der beim Klicken auf ein anderes Fragment geht:

%Vor%

Endergebnis wäre etwas wie folgt und wenn Sie zu Startseite Tabs gehen und dann zurück zu Kategorie Tab gehen, werden Sie Ihre Fragment Position nicht geändert.

Zwei Punkte, an die Sie sich erinnern sollten:

  1. setze mPager.setOffscreenPageLimit(3); , wenn du dein Fragment nicht zerstören willst
  2. Im inneren Fragment pass getChildFragmentManager() anstelle von FragmentManager()

Wenn Sie Inner ViewPager nicht benötigen Und Sie wollen nur eine Instanz von Fragment zur Zeit hier laden, ist eine weitere Option:

1- Machen Sie den ersten Punkt des vorherigen Weges.

2- Setzen Sie in Ihrem Fragment xml FrameContainer und laden Sie Ihr Fragment darin:

%Vor%

Bearbeiten: Dies ist nicht der beste Ansatz, aber ich denke, dein Problem zu lösen:

1- Erstellen Sie ein statisches Feld in Ihrem MainActivity wie folgt:

%Vor%

2- Wenn Sie onClick in Ihrem Fragment aufrufen, aktualisieren Sie String value in Ihrem MainActivity .

%Vor%

erster Wert ist ViewPager-Position, zweiter Wert ist Ihr innerer Fragmenttyp (z. B. fragment_d);

3- In Ihrem ViewPager

%Vor%     
Amir 20.08.2016 16:55
quelle
0

Sie können Fragmente innerhalb des Seitenfragments ändern. TAB_A implementiert beispielsweise eine Logik zum Auswählen des Fragments 1 oder 2 und zum Anzeigen des ausgewählten Fragments darin. Hierarchie sieht wie folgt aus:

ViewPager - & gt; TAB_A - & gt; Fragment 1 oder 2 (Anzeige innerhalb von TAB_A).

Sie sollten getChildFragmentManager () auch verwenden, um Fragmente in TAB_A zu verwalten.

    
Ufkoku 23.08.2016 18:53
quelle