2016-11-23 1 views
1

Im Quellcode von Fragment, gibt es ein Feld mActivity genannt:wann wird Fragment.mActivity field geschrieben?

package android.app; 
public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListener { 

    // Activity this fragment is attached to. 
    Activity mActivity; 

Um wo dieses Feld geschrieben zu finden ist, habe ich wie folgt versucht haben:

  1. Ich habe den Quellcode Fragment geprüft, und ich fand nur ein Schreibverhalten in Fragment.initState() Methode:

    mActivity = null; 
    

    Aber verwendet mActivity sehr häufig, es muss irgendwo das Feld geschrieben werden.

  2. Der Zugriff von mActivity ist default, also vielleicht gibt es andere Klassen, die dieses Feld schreiben werden. Dann habe ich die Verwendung der Klasse überprüft, aber nichts, was ich relativ zum Schreibverhalten dieses Feldes gefunden habe.

  3. Weiß nicht was als nächstes zu tun, vielleicht einige spezielle Prozesse in Android?

Könnte mir jemand sagen, ob die Art und Weise über richtig ist es, Antworten auf solche Fragen zu finden? Bitte geben Sie mir einen Ratschlag zur Verwendung einer Klasse/Feld/Methode.

Antwort

1

Kein Fragment, aber FragmentManager verwaltet tatsächlich mActivity Feld. Da es nicht privat ist, kann jede paketlokale Klasse darauf zugreifen.

prüfen FragmentManager.moveToState() Methode, line 900 für Unterstützung FragmentManager
prüfen FragmentManager.moveToState() Methode, line 848 für android.app.FragmentManager

+0

Haben Sie schon einmal das Auftreten von 'Fragment' Klasse überprüft? Wenn nicht, könntest du mir bitte sagen, wie schnell du findest, dass die Zeile das Feld verändert hat? Vielen Dank! – JY0284

+0

Sie sind mit der falschen Klasse verknüpft. Die Frage war über 'android.app', nicht unterstützen v4-Bibliothek –

+0

@ cricket_007, habe ich' finden Verwendungen' in Android Studio für das Finden von Akzessionen zu 'Fragment.mActivity'. Wie für die falsche Klasse - es ist das gleiche für 'android.app.FragmentManager'. Der einzige Unterschied ist in der Zeilennummer: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/app/FragmentManager.java#848 –