Derzeit (Android API 17), die einzige Erwähnung von super
in der Android Referenz zu Fragment ist zufällig über einige Codebeispiele (im Gegensatz zu den Android Referenz auf Aktivität , die sorgfältig notiert wo super
benötigt wird).
SO schlägt vor im Internet zu suchen nach Bedarf oder Warten auf einen Absturz, um festzustellen, wo ein Aufruf von super
erforderlich ist. Ich möchte SO-Benutzer bitten, ihr Wissen darüber mitzuteilen, für welche der Fragment-Lebenszyklus-Methoden ein Aufruf von super
erforderlich ist.
super
erforderlich
onAttach()
onCreate()
- vermutlich ja, da Activity
version es erfordert onCreateView()
- scheint ok mit oder ohne onActivityCreated()
onViewStateRestored()
onStart()
- vermutlich ja, da Activity
version es erfordert onResume()
- vermutlich ja, da Activity
version es erfordert
onPause()
- vermutlich ja, da Activity
version es erfordert
onStop()
- vermutlich ja, da Activity
version es erfordert onDestroyView()
onDestroy()
- vermutlich ja, da Activity
version es erfordert onDetach()
onSaveInstanceState()
- vermutlich ja, da Activity
version es erfordert
Alle entsprechenden Aktivitätslebenszyklusmethoden außer onSaveInstanceState
erfordern Aufrufe von super. Außerdem:
onAttach()
- ja onActivityCreated()
- ja onViewStateRestored()
- ist keine Fragment-Methode onDestroyView()
- ja onDetach()
- ja onSaveInstanceState()
- von Fragment # onSaveInstanceState es
sieht aus wie ein Nein Alle Methoden, die Aufrufe erfordern, um die erste Zeile ihrer Methode in android.app.Fragment zu teilen:
mCalled = true;
Auf diese Weise kann der FragmentManager überprüfen, ob mCalled wahr ist und eine SuperNotCalledException auslösen, wenn er nicht aufgerufen wird. Weitere Informationen finden Sie unter FragmentManager # moveToState , um diese Implementierung zu sehen.
Beim Generieren eines Fragments mit Eclipse hat der Methodenvorlagencode onCreateView keinen Aufruf von super.onCreateView. Auch das im Allgemeinen recht gute Buch, das von WROX veröffentlicht wurde: Android 4 Application Development vermisst es in seinem Beispiellebenszyklus-Code (es werden keine anderen Aufrufe an Super verpasst).
Natürlich könnten diese beiden Quellen falsch sein, aber die Verwendung der Eclipse-Vorlage und nicht das Hinzufügen von super.onCreateView hat mir kein Problem verursacht.