片段中的getContext()

Coo*_*ind 2 android android-context android-fragments

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

Mr.*_*r.O 13

所有提到的答案基本上都是正确的。您应该在 onAttach 和 onDetach 之间获取活动的上下文,因此我喜欢将其添加到我的片段中:

private Context mContext;

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    mContext = context;
}

@Override
public void onDetach() {
    super.onDetach();
    mContext = null;
}
Run Code Online (Sandbox Code Playgroud)

然后每当我使用 mContext 我添加一个检查:

if(mContext != null) {
   //your code that uses Context

}
Run Code Online (Sandbox Code Playgroud)

更新:

在支持库 27.1.0 及更高版本中,Google 引入了新方法 requireContext() 和 requireActivity(),它们将返回一个非空的上下文或活动。

如果在调用该方法时当前未附加 Fragment,它将抛出 IllegalStateException: 因此在 try catch 块中使用。

  • 是的,如果片段中有一个带有回调的长时间运行的操作,并且您刚刚单击了一个切换片段的按钮,那么您的片段不再附加到您的活动中。 (3认同)

Ale*_*ych 5

getContext()onAttach()和之间始终将不为nullonDetach()