Fragmente werden bei Verwendung der Zurück-Schaltfläche nicht immer ersetzt

9

Ich verwende Actionbar-Tabs, weil ich die Navigationselemente auf jeder Seite haben muss. Ich verwende ActionBarSherlock für Abwärtskompatibilität (mindestens API 8, Ziel-API 17). Meine MainActivity erweitert SherlockFragmentActivity. In meinem onCreate() dafür habe ich

%Vor%

Alle Tab-Fragmente sind SherlockListFragments , die ActionBar.TabListener implementieren und dies tun

%Vor%

Die Suchseite hat einen EditText und verwendet ihren Wert in einer AsyncTask , um Daten von einer API abzurufen und sie vor dem Aufruf von

zu einer SQLite-Datenbank hinzuzufügen %Vor%

bis zeige die Details , was eine Methode in meiner MainActivity wie folgt ist:

%Vor%

DetailFragment ist ein SherlockFragment , das getArguments() verwendet, um die codeID abzurufen -

%Vor%

- und liest die übereinstimmenden Daten aus der Datenbank, um sie anzuzeigen. Diese Daten enthalten oft Links zu weiteren Details, die dazu führen, dass showDetailView mit der neuen codeID erneut aufgerufen wird.

MyPages ist eine Liste aller zwischengespeicherten Detailseiten und ruft auch showDetailView auf:

%Vor%

In Zukunft scheint das gut zu funktionieren. Wenn ich jedoch den Zurück-Knopf benutze, bleiben manchmal die Fragmente hängen, so dass sie immer noch hinter dem wiederhergestellten Fragment sichtbar sind. Wie verhindere ich das?

Ich denke, das Problem ist vielleicht, dass die Registerkarten nicht zum Backstack hinzugefügt werden? Aber wenn ich das versuche, werfen sie eine Ausnahme und sagen mir, dass sie nicht zum Backstack hinzugefügt werden können, also verstehe ich nicht, wie Sie damit umgehen sollen. Ich verstehe nicht, warum dieses Ding, das es zu sein scheint, eine unglaublich einfache Navigationssache sein sollte, die viele Leute machen wollen - der Rückschlüssel war auf jedem Android-Telefon und Tisch, den ich jemals gesehen habe, physisch oder Software ! - Offensichtlich hat keine bekannte Lösung. Habe ich ihre Verwendung grundlegend missverstanden? Sollen Fragmente in dieser Situation nicht verwendet werden? Wie sonst machen Sie persistente Navigationselemente, ohne den gleichen Code auf jeder Seite zu wiederholen?

Logging - App starten -

%Vor%

Suche jetzt sichtbar. Suchen Sie nach einem Objekt, um die Detailansicht aufzurufen -

%Vor%

Detail jetzt sichtbar; Suche weg. Klicken Sie auf den Tab Meine Seiten -

%Vor%

MyPages jetzt sichtbar; Detail gegangen. Klicken Sie auf Zurück -

%Vor%

Suche und Meine Seiten werden jetzt beide angezeigt.

HauptAktivität:

%Vor%

Beispielfragment - MyPagesFragment:

%Vor%

Detailfragment

%Vor%

Hinweis: Die Änderungen wurden im Anschluss an eine Antwort von Sheldon vorgenommen (der anscheinend ihre Antwort und Kommentare ärgerlich gelöscht hat), weshalb der TabListener-Code zwischen dem ursprünglichen Abschnitt und dem später veröffentlichten Code geändert wurde.

>

Ich habe derzeit eine Lösung gehackt, indem ich den Backstack auf jeder Tab-Auswahl geleert habe und auf einer obersten Registerkarte als Exit-the-App-Anfrage behandelt habe, was okay ist, denke ich, aber ich möchte, dass Benutzer wirklich sind Englisch: www.mjfriendship.de/en/index.php?op...39&Itemid=32 Ich bin in der Lage, durch die Tabs weiterzuspielen, wenn das überhaupt möglich ist (weil ich z. B. fünf Detailseiten tief hatte und schnell nach etwas suchte, das, wie sich herausstellte, nicht existierte, kann ich zurückgehen diese Detailseiten und immer noch eine oder mehrere, um verschiedenen Detaillinks zu folgen.)

    
vestofwarlock 13.07.2013, 14:47
quelle

1 Antwort

1

Versuchen Sie das ..

%Vor%     
selva_pollachi 25.07.2013 10:08
quelle

Tags und Links