【问题标题】:onAttach() or onActivityCreated(), which is the best place to read activity?onAttach() 或 onActivityCreated(),哪个是阅读活动的最佳位置?
【发布时间】:2014-02-03 09:39:19
【问题描述】:

我创建的片段取决于其父活动的几个属性。我浏览了Fragment Life cycle 文件。我需要将活动的副本存储在一个变量中,以便以后可以访问它。有两个地方,我可以这样做

推荐的最佳地点是哪个?为什么?曾有getActivity在调用onAttach()后在片段中返回null的情况

【问题讨论】:

  • onActivityCreated 是活动可用的第一个位置 onAttach 之后,所以它没有太大区别,但我建议在 onActivityCreated 中这样做。
  • 如果看到fragment的生命周期,onAttach在onActivityCreated之前调用

标签: java android android-fragments


【解决方案1】:

如果 getActivity() 在 onAttach() 被调用后返回 null,这仅意味着片段不再附加到活动。所以最安全的地方还是onAttach()。

【讨论】:

    【解决方案2】:

    最近几天,我正在研究片段。片段生命周期描述如下: onAttach()--onCreate()---onCreateView()--onViewCreate()--onActiviyCreate(); 然后我查找源代码:

     @CallSuper
    public void onAttach(Context context) {
        mCalled = true;
        final Activity hostActivity = mHost == null ? null : mHost.getActivity();
        if (hostActivity != null) {
            mCalled = false;
            onAttach(hostActivity);
        }
    }
    @Deprecated
    @CallSuper
    public void onAttach(Activity activity) {
        mCalled = true;
    }
    

    我们发现 onAttach() 会检查 hostActivity 是否存在,但它不能确定 Activity 是否存在。 onActivityCreate() 在片段的活动创建时被调用,并告诉片段与新活动实例完全关联。也就是说,activity已经完成了自己的Activity.onCreate()。

    所以我建议你在 onActivityCreate() 方法上做。

    【讨论】:

      猜你喜欢
      • 2017-11-04
      • 2023-04-08
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多