2016-11-23 59 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 –