我在Activity
内使用Fragment
。Fragment
有一个OnInitListener
接口,为了将数据传递给主机Activity
,它在onCreate()
方法中被调用。问题是,有时(通常是当屏幕被锁定和解锁时),我从一个对象中得到一个NullPointerException
,它是在Activity#onCreate
上初始化的。
// 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#onCreate
在Activity#onCreate()
之前被调用,这就是为什么我得到NPE
,但我可能错了。什么好主意吗?
我不知道它的onCreate()
,但我认为片段onCreate()
将永远是后来的活动的onCreate()
。如果我做一个片段,我总是使用onActivityCreated()
。