持有 Activity 实例的最安全方法
Safest approach for holding an instance of Activity
什么是 最好和更安全的方法 来持有 Activity
的 instance
private Activity mActivity;
第一种方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = getActivity();
}
第二种方法:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.from(getActivity()).inflate(R.layout.fragment_main, container, false);
mActivity = (Activity) view.getContext();
return view;
}
在大多数情况下,您不需要捕获 Activity。
但如果你愿意,我的建议是,
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mActivity = this;
}
好吧,这取决于。我建议您使用 getActivity()
。
onAttach(Activity activity)
后即可使用。如果您查看 FragmentManager
源代码,您会发现 Fragment
的 mActivity
字段是在调用 onAttach
.
之前设置的
但是你要小心,activity 在 onActivityCreated
被调用之前没有完全初始化(视图,..)。
什么是 最好和更安全的方法 来持有 Activity
instance
private Activity mActivity;
第一种方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = getActivity();
}
第二种方法:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.from(getActivity()).inflate(R.layout.fragment_main, container, false);
mActivity = (Activity) view.getContext();
return view;
}
在大多数情况下,您不需要捕获 Activity。
但如果你愿意,我的建议是,
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mActivity = this;
}
好吧,这取决于。我建议您使用 getActivity()
。
onAttach(Activity activity)
后即可使用。如果您查看 FragmentManager
源代码,您会发现 Fragment
的 mActivity
字段是在调用 onAttach
.
但是你要小心,activity 在 onActivityCreated
被调用之前没有完全初始化(视图,..)。