我最近一直在使用碎片,并且好奇如何最好地使用对碎片的父活动的引用。是继续调用getActivity()更好,还是在onActivityCreated回调中初始化parentActivity变量?
我最近一直在使用碎片,并且好奇如何最好地使用对碎片的父活动的引用。是继续调用getActivity()更好,还是在onActivityCreated回调中初始化parentActivity变量?
这实际上包含在Android官方文档中的Fragments部分。 当你需要父活动的上下文(例如Toast,Dialog)时,你会调用getActivity()
。 当您需要调用Fragment界面中的回调方法时,应使用在onAttach(...)
中实例化的回调变量。
public static class FragmentA extends ListFragment {
ExampleFragmentCallbackInterface mListener;
...
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
mListener = (ExampleFragmentCallbackInterface ) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + " must implement ExampleFragmentCallbackInterface ");
}
}
...
}
使用getActivity()是最好的选择。您无需维护一个变量来存储它(总是,直到应用程序生命周期结束!)。如果需要,调用该方法并使用即可!:)
getActivity()
如果你想确保,你需要先进行检查。
if (getActivity() != null){ // then your logic with getActivity()}
getActivity()
返回 null,则表示您尚未附加,因此mListener
也将为 null。与使用getActivity()
相比,这种方法更好,因为它确保您附加到的任何活动都实现了与片段中的内容一起使用所需的接口。 - James McCrackenonAttach(Activity activity)
在API 23中已被弃用,因此这个链接不再有效http://developer.android.com/reference/android/app/Fragment.html#onAttach(android.app.Activity) - CrimsonX