Verhindern Fragment recovery in Android
Wir sind durch die Verwendung von Fragmenten und wir brauchen Sie nicht automatisch wiederhergestellt wird, wenn die Activity neu erstellt wird.
Aber Android jedes mal, wenn Activity::onCreate(Bundle savedInstanceState)
-> super.onCreate(savedInstanceState)
genannt wird, stellt Fragmente, auch wenn wir setRetainInstance(false) für diese Fragmente.
Darüber hinaus in diesen Fragments
Fragment.performCreateView()
direkt aufgerufen wird, ohne durch die Fragment::onAttach()
und so weiter. Plus, einige der Felder sind null im inneren restauriert Fragment
...
Weiß jemand, wie man verhindern, dass Android von der Wiederherstellung Fragmente?
P. S. Wir wissen, dass im Falle der Neuerstellung Aktivität für die config ändert, könnte es getan werden, indem man ein manifestndroid:configChanges="orientation|screenSize|screenLayout
. Aber was ist mit der Neuerstellung Aktivität bei dem automatischen Speicher-Reinigung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden wir fertig, indem Sie zu Aktivität:
Er unterdrückt alle gespeicherten Daten auf erstellen/neu erstellen Lebenszyklus einer Aktivität und vermeidet Fragmente auto re-creation.
@goRGon 's Antwort war für mich sehr nützlich, aber eine solche Verwendung zu ernsthaften Problemen führen, wenn es einige weitere Informationen, die Sie braucht, um vorwärts zu Ihrer Aktivität nach neu.
Hier ist die verbesserte version, die nur entfernt "Fragmente", aber halten alle anderen Parameter.
ID, die entfernt vom Bündel Teil
android.support.v4.app.FragmentActivity
Klasse alsFRAGMENTS_TAG
Feld. Es kann natürlich im Laufe der Zeit ändern, aber es ist nicht zu erwarten.onSaveInstanceState()
. Dies vermeidet die Persistenz desFragment
Informationen in den ersten Platz.Diejenigen, die haben NPE mit ViewPager, wenn verwenden Sie diese Methode, beschrieben in der akzeptierten Antwort, bitte überschreiben
ViewPager.onRestoreInstanceState(Parcelable state)
Methode, und rufen
super.onRestoreInstanceState(null);
statt.
Entfernte ich die Fragmente in die Activity onCreate.
Hatte ich auch eine
ViewPager
so ich habe in der fragmentMananger wenn es hatte Fragmente in Ihr und nahm Sie inonCreate()
.Mithilfe zum Beispiel diesen thread: Entfernen Sie alle Bruchstücke aus dem container.
commitNow()
zu entfernen, Fragmente synchronosly.Ich hatte ein problem mit
TransactionTooLargeException
. So zum Glück nach der Verwendung tolargetool ich gegründet, dass die Fragmente (android:support:Fragmente) wurden, im Speicher, und die Transaktion wurde zu groß. So endlich habe ich dies getan, und es hat Super geklappt.View-Hierarchie nicht automatisch wiederhergestellt. Also, in
Fragment.onCreateView()
oderActivity.onCreate()
Sie wiederherstellen müssen alle Ansichten (aus xml-oder programmgesteuert). Jeder ViewGroup, die enthält ein fragment, müssen dieselbe ID haben, wie als du es das erste mal. Sobald die view-Hierarchie erstellt wird, Android stellt alle Fragmente und legen Ihre Ansichten in die richtigen ViewGroup Dank der ID. Lassen Sie uns sagen, dass Android merkt sich die ID der ViewGroup, auf dem ein fragment war. Dies geschieht irgendwo zwischenonCreateView()
undonStart()
.