我在哪里可以访问getContext()
中的Fragment
?我的意思是,它不是null,可以使用(例如,用于控件创建)。是onAttach
,onCreateView
还是onActivityCreated
?
[getContext()
在onAttach()
和onDetach()
之间始终不会为null
所有提到的答案基本上都是正确的。您应该在onAttach和onDetach之间获得活动的上下文,所以我喜欢将其添加到片段中:
private Context mContext;
@Override
public void onAttach(Context context) {
super.onAttach(context);
mContext = context;
}
@Override
public void onDetach() {
super.onDetach();
mContext = null;
}
然后每当我使用mContext时,我都会添加一张支票:
if(mContext != null) {
//your code that uses Context
}
UPDATE:
在支持库27.1.0及更高版本中,Google引入了新方法requireContext()和requireActivity(),它们将返回非null的Context或Activty。
如果在调用该方法时当前未附加Fragment,它将抛出IllegalStateException:请在try catch块中使用。
使用getActivity()
和onAttach
之间的onDetach
来获取附件Activity
,它是Context
的Fragment
。
通过在getContext()
中调用onCreateView()
,您非常安全。如果您查看docs,您会发现从onAttach
开始,您的片段将具有上下文。