So entfernen Sie ein Fragment aus FragmentPagerAdapter?

8

Ich weiß, dass es hier schon einige Themen gibt, aber ich konnte keine Lösung finden, die ich für meinen Fall verwenden könnte.

Ich habe eine funktionierende Schiebe-Galerie, die eine benutzerdefinierte FragmentActivity und FragmentPagerAdapter verwendet, die eine Liste von Fragmenten enthält.

Innerhalb der FragmentActivity ist ein ImageView "delete". Wenn Sie darauf klicken, wird die Funktion deleteMedia() aufgerufen, die dann die aktuelle Fragment entfernen soll und die folgende Fragment sollte angezeigt werden. Wie müsste ich das in meinem Beispiel machen?

FragmentActivity:

%Vor%

FragmentPagerAdapter:

%Vor%

Danke für Ihre Hilfe!

    
e-nature 18.03.2012, 13:44
quelle

4 Antworten

12

Zunächst schlage ich vor, dass Sie in Erwägung ziehen, Ihre FragmentPagerAdapter so zu ändern, dass sie eher wie aussieht die Probe . Normalerweise haben Sie keine Liste von Fragmenten, nicht mehr als ein ArrayAdapter enthält normalerweise eine Liste von Views für die Zeilen. Normalerweise erstellen Sie die Fragmente bei Bedarf, und jemand anderes hält die Liste.

Um etwas zu löschen, lösche es dann aus deinen Modelldaten (was die FragmentPagerAdapter normalerweise umschließt). Stellen Sie sicher, dass getCount() dann die richtige Anzahl an Elementen zurückgibt. Rufen Sie dann notifyDataSetChanged() für FragmentPagerAdapter auf, was eine Neuzeichnung von ViewPager auslösen sollte.

    
CommonsWare 18.03.2012, 14:15
quelle
17

das ist die Lösung, die ich verwende:

mViewPager: ist die Ansicht, die Sie verwenden, um Ihr Fragment

zu setzen %Vor%

TABLE: ist nur eine Integer-Liste der Position aller meiner Fragmente

%Vor%     
douarbou 11.07.2012 22:43
quelle
1

Ich habe eine Lösung gefunden, die die Methode "onPostResume ()" der Aktivität verifiziert und die notifyDataSetChanged innerhalb dieser aufruft.

%Vor%     
Michele Sapignoli 11.02.2016 17:23
quelle
1

Wenn Sie FragmentPagerAdapter zum Hinzufügen und Entfernen von Fragmenten an zufälliger Position (nicht immer am Ende) dynamisch verwenden, gibt es eine Methode, der Sie mehr Beachtung schenken müssen, nämlich getItemId. Standardmäßig verwendet FragmentPagerAdapter die Position "viewId" als Tag-Name für Fragmente. Die Position ändert sich jedoch, wenn Sie Fragmente hinzufügen oder entfernen. Als Ergebnis erhalten Sie möglicherweise eine leere Seite, da die Position, die Sie hinzufügen, von einem vorhandenen Fragment belegt ist. Um dieses Problem zu lösen, überschreiben Sie getItemId.

%Vor%     
Jason 20.03.2018 21:28
quelle