2016-11-23 58 views
1

Fragment源代碼中,有一個叫mActivity場:什麼時候將Fragment.mActivity字段寫入?

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

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

爲了尋找到這個領域所記,我已經試過如下:

  1. 我已經檢查的Fragment的源代碼,我發現在Fragment.initState()方法只有一個書寫行爲:

    mActivity = null; 
    

    Fragment非常頻繁地使用mActivity,必須在某處寫入字段。

  2. mActivity的訪問是default,所以也許還有其他類將寫這個字段。然後我檢查了Fragment類的用法,但沒有發現與該字段的寫作行爲有關。

  3. 不知道接下來要做什麼,也許在Android中有一些特殊的過程?

任何人都可以告訴我,上述方法是否正確找到這些問題的答案? 請給我一些關於如何找到課程/領域/方法的建議。

回答

1

不是Fragment,而是FragmentManager實際管理mActivity字段。由於它不是私有的,任何軟件包本地類都可以訪問它。

檢查FragmentManager.moveToState()方法,line 900支持FragmentManager
檢查FragmentManager.moveToState()方法,line 848android.app.FragmentManager

+0

你檢查過'Fragment'類別的發生?如果沒有,請告訴我你如何快速找到修改該字段的行?謝謝! – JY0284

+0

您鏈接到錯誤的類。問題是'android.app',不支持v4庫 –

+0

@ cricket_007,我在Android Studio中使用'find usages'來查找'Fragment.mActivity'的插件。至於錯誤的類 - 「android.app.FragmentManager」是一樣的。唯一的區別是行號:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/app/FragmentManager.java#848 –