2016-10-23 2 views
2

Update Ok, ich habe herausgefunden, was das Prolem ist. Ich versuche, Fragment für Tag zu finden, aber wenn ich es dem Adapter hinzufüge, kann ich das Tag für das Fragment nicht setzen. Aber ich weiß nicht wie ich hinzufügen kann.Fragment aus dem Pager in einen anderen Container verschieben

Ich benutze eine Landschaft und ein Porträt in meiner App. Das Landscape-Layout enthält zwei Constrait-Layouts, das Portrait-Layout enthält eine Ansichtsseite mit einem Fragment-State-Pager. Ich habe ein Fragment mit Recycler-Ansicht und ein weiteres Fragment mit einem Kreisdiagramm. Wenn ich das Handy von Land zu Porträt rotiere, bekomme ich einen Ausnahme-Fragment-Container mit einer anderen ID, also entferne ich das Fragment aus dem Fragment-Manager, bevor ich es wieder hinzufüge. Es löst die Ausnahme, aber in diesem Fall kann ich den Status der Recycle-Ansicht nicht beibehalten. Wie kann ich

+0

mit Status bedeutet, Bildlaufposition? Oder wollen Sie nicht alle Daten des Recyclers laden? – Farhan

+0

hast du versucht, was ich in meiner Antwort erwähnt? SatzRetainInstanz? – Farhan

+0

Ich habe versucht, aber in diesem Fall bekomme ich diese Ausnahme: java.lang.RuntimeException: Kann Aktivität nicht starten ComponentInfo {hu.astron.recruiting/hu.astron.recruiting.MainActivity}: java.lang.IllegalArgumentException: Keine Ansicht gefunden für id 0x7f0b005a (hu.astron.rectruiting: id/Pager) für Fragment PersonsFragment {f9530d7 # 0 id = 0x7f0b005a} – user3057944

Antwort

0

Endlich habe ich herausgefunden, was das Problem war. Bevor ich die Fragmente zum Pager hinzufüge, muss ich ein Tag durch Hinzufügen (Fragment, Tag) setzen. Es war der Fehler, ich habe die Fragmente nicht markiert, und als ich versuchte, das Fragment nach dem Tag zu finden, war es null, und ich habe immer eine neue Instanz erstellt.

0

Ok, wenn Sie möchten, dass Ihre App nicht neu erstellen, wenn sich die Ausrichtung ändert. Fügen Sie diese Zeile android:configChanges="orientation|screenSize" zu Ihrer Aktivität in Ihrer AndroidManifest.xml Datei hinzu. Diese Zeile verhindert, dass die App bei einer Orientierungsänderung neu erstellt wird. Sie ändert lediglich die Ausrichtung.

Beispiel

<activity android:name=".MainActivity" 
    android:configChanges="orientation|screenSize" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
+0

ohne neu zu erstellen, wie kann er verschiedene Layouts für Quer- und Hochformat verwenden? – Farhan

+0

Danke, mein Problem ist nicht genau den Fragmentstatus beizubehalten. Mein Problem, ich kann mein Fragment nicht zu einem Container hinzufügen, nachdem ich es zu einem FragmentStatePagerAdapter ohne Aufruf von fragmentManager.remove() hinzugefügt habe. Allerdings können Sie die Orientierung ändern durch Überschreiben der onConfigurationChanged() -Methode – user3057944

+0

@Farhan, ja meine schlechte, dachte nicht darüber nach. – FARID

0

Ich bin nicht sicher genau, aber diese Funktion sagt, wird es das Fragment Zustand beibehalten. Man könnte dies versuchen:

setRetainInstance 

Von Android Docs

Es wird nicht zerstören und das Fragment nur neu erstellen.

+0

Danke, aber mein Problem nicht genau mit den Fragmentstatus zu behalten, kann ich es nicht zu einem Container hinzufügen, nachdem ich es zu einem Pager hinzugefügt. – user3057944

+0

ja das gleiche Fragment kann nicht in zwei Ansichten gesetzt werden. so viel ich weiss – Farhan

0

Ich möchte Scroll-Position beibehalten. App beginnt bei Hochformat, so dass ich hinzufügen, um die Fragmente zu einem FragmentStatePager, als ich Landschaft wechseln, nenne ich fragmentManager.replace (fragment, contraintContainer, tag), und als ob ich wechseln zu Porträt, und ich nicht remove it fragment manager Ich bekomme diese Ausnahme: java.lang.IllegalStateException: Kann Container ID des Fragments PersonsFragment nicht ändern {9726278 # 2 id = 0x7f0b005b Personen}: war 2131427419 jetzt 2131427418 aber wenn ich fragmentManager.remove() aufrufen I Scroll-Position kann nicht beibehalten werden.

Verwandte Themen