【发布时间】:2012-10-29 05:03:02
【问题描述】:
我最近一直在处理 Fragment,我只是好奇使用对 Fragment 的父 Activity 的引用的最佳做法是什么。是继续调用 getActivity() 还是在 onActivityCreated 回调上初始化 parentActivity 变量会更好。
【问题讨论】:
标签: android
我最近一直在处理 Fragment,我只是好奇使用对 Fragment 的父 Activity 的引用的最佳做法是什么。是继续调用 getActivity() 还是在 onActivityCreated 回调上初始化 parentActivity 变量会更好。
【问题讨论】:
标签: android
如果您在从某个活动调用的片段中,要获取对父活动的引用,您可以在 onViewCreated() 或片段的后续钩子方法中直接调用它,这只是为了确保父活动是不为空
getActivity()
如果你真的想确定你需要先检查
if (getActivity() != null){ // then your logic with getActivity()}
【讨论】:
这实际上包含在 Fragments 的 Android 官方文档中。当您需要父活动的上下文(例如 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 ");
}
}
...
}
【讨论】:
mListener 也将为 null。这种方法比使用getActivity() 更好,因为它确保您附加到的任何活动都实现了处理片段中的内容所需的接口。
onAttach(Activity activity) 现在在 API 23 中已弃用,因此这不再有效 developer.android.com/reference/android/app/…
getActivity() 是最好的。您无需维护要存储的变量(始终,直到应用程序循环!)。如果需要,调用该方法并使用! :)
【讨论】: