2017-07-17 2 views
0

Hier meine Hierarchie ist:ViewPager: Adapter Ansichten Wiederherstellung nicht, wenn gehen zurück

CoordinatorLayout 
- AppBarLayout 
    - CollapsingToolbarLayout 
- NestedScrollView 
    - FrameLayout (contentFrame) 
     - Container Fragment 
      - ViewPager 
       - Recycler(List) Fragment 
       - Map Fragment 
      - TabLayout 

Der Container Fragment einer Oberfläche mit Registerkarten von zwei Fragmenten zeigt: Liste und Karte. Standortdaten werden aufgelistet bzw. zugeordnet. Wenn Sie einen Speicherort auswählen, wird das contentFrame-Fragment durch ein Detail der Standortdaten ersetzt.

Das alles ist in Ordnung, bis ich auf die Zurück-Schaltfläche klicke und zum Container-Fragment zurückkehre: Die Ansichten, die vom Adapter bereitgestellt werden sollen, werden nicht wiederhergestellt, und nur die Registerkarten sind auf dem Bildschirm sichtbar. Ich habe versucht, durch die Lebenszyklen jedes betroffenen Fragments zu schreiten und habe die Dokumentation gelesen, bis meine Augen verschwunden sind. Was könnte der Grund dafür sein?

+0

Ist das alles innerhalb einer Aktivität? Meine gute Reaktion ist, dass der Zustand "nach Region" des Fragments verloren geht, wenn das Fragment "annbriar golf course" angezeigt wird (der Instance-Status eines Fragments wird nur garantiert gespeichert, wenn der Instanzstatus der Aktivität gespeichert wird). Aber natürlich ist es schwer zu wissen, ohne den Code zu sehen. –

+0

@BenP. Ja, es ist alles innerhalb einer Aktivität, wobei Fragmente verwendet werden, die in der contentFrame FrameLayout angezeigt werden. mFragmentManager.beginTransaction() .replace (R.id.contentFrame, Fragment) .addToBackStack (null) .commit(); –

+0

Sie können aus dem Bildschirmtitel und der TabLayout sehen, dass Ihre Transaktion erfolgreich aus dem Back-Stack herausgefallen ist, was zu der Annahme führt, dass das Problem darin besteht, wie Ihr ViewPager eingerichtet wird. Vielleicht gibt es einen Initialisierungscode, der nur beim ersten Mal ausgeführt wird? –

Antwort

1

Wenn Sie ein Fragment in einem Fragment anzeigen, sollten Sie den Child Fragment Manager verwenden. So sollten Sie das Kind Fragment-Manager für Ihre viewpager werden:

getChildFragmentManager() 

statt

getFragmentManager() 

Sind Sie das tun? schwer zu wissen ohne den Code.

Aber klingt, als könnte es Ihr Problem sein

+1

Aha! Das hat definitiv etwas damit zu tun. Ich habe getActivity() verwendet. GetSupportFragmentManager(). Ich habe die Änderung an getChildFragmentManager() vorgenommen und jetzt, wenn ich zurückklicke, stürzt es innerhalb der OnCreateView-Methode des Map-Fragments ab, aber es scheint, dass ich mich in die richtige Richtung bewege. –

Verwandte Themen