片段中的getContext()

问题描述 投票:2回答:4

我在哪里可以访问getContext()中的Fragment?我的意思是,它不是null,可以使用(例如,用于控件创建)。是onAttachonCreateView还是onActivityCreated

android android-fragments android-context
4个回答
5
投票

[getContext()onAttach()onDetach()之间始终不会为null


3
投票

所有提到的答案基本上都是正确的。您应该在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块中使用。


1
投票

使用getActivity()onAttach之间的onDetach来获取附件Activity,它是ContextFragment


0
投票

通过在getContext()中调用onCreateView(),您非常安全。如果您查看docs,您会发现从onAttach开始,您的片段将具有上下文。

© www.soinside.com 2019 - 2024. All rights reserved.