【问题标题】:Activity and Fragment onCreate call orderActivity 和 Fragment onCreate 调用顺序
【发布时间】:2014-05-19 20:01:08
【问题描述】:

我在Activity 中使用FragmentFragment 有一个OnInitListener 接口,以便将数据传递给主机Activity,它在onCreate() 方法内部调用。问题是有时(通常是在屏幕被锁定和解锁时)我从一个在Activity#onCreate 上初始化的对象中得到一个NullPointerException 这是代码:

// Activity
public void onCreate() {
    super.onCreate();
    // ...some code...

    myObject = new MyObject();
}

@Override
public void onInit(ObjectProperty property) {
    myObject.setProperty(property);   // Here I get NullPointerException
}


// Fragment
public void onCreate() {
     // ... some code ...

     property = new ObjectProperty();
     listener.onInit(property);
}
@Override
public void onAttach(Activity activity) {
    listener = (OnInitListener) activity;  // This part is actually surrounded by try/catch, so don't worry about it
}

总而言之,Fragment 应该初始化一个对象并将其传递给侦听器,因此Activity 可以将其设置为另一个对象。

我猜问题是Fragment#onCreateActivity#onCreate() 之前被调用,这就是我得到NPE 的原因,但我可能是错的。有什么想法吗?

【问题讨论】:

标签: android android-fragments android-activity


【解决方案1】:

我不知道onCreate(),但我认为片段onCreate() 将永远是活动的onCreate()。如果我制作片段,我总是使用onActivityCreated()。这是在活动创建后调用的。

【讨论】:

  • Activity onCreate() 总是会先被调用,然后 onAttach() 会被 Fragment 的 onCreate() 闲置。
  • @PratikGoyal 感谢您的回复,但为什么不使用onActivityCreated()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 2017-05-15
  • 2015-07-04
  • 1970-01-01
相关资源
最近更新 更多