我需要在Fragment的onViewCreated()方法中使用上下文。在某些情况下,上下文在生产中可能为空。在我的测试中,我没有遇到这种情况。我阅读了类似的问题,并推断出以下解决方案,但是我不确定这是否是一种好的做法,而且正如我之前所说,我没有遇到过测试失败的案例。任何建议都将不胜感激。
public class MyFragment extends Fragment {
private Context context;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_something, container, false);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = getActivity();
}
@Override
public void onDetach(Context context) {
super.onAttach(context);
this.context = null;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if(this.context==null)
return;
// i need to use fragment here.
}
}
答案 0 :(得分:0)
要在onViewCreated
中检查空上下文检查,可以在Fragment类上创建上下文是一个好习惯。在onViewCreated
方法中上下文可以为空。
您可以使用getContext()
在任何位置将上下文放在片段中。为了更好,您可以在onCreateView
中设置上下文值,然后在onCreatedView()
方法中检查上下文。
public class MyFragment extends Fragment {
private Context context;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
this.context = getContext()
return inflater.inflate(R.layout.fragment_something, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if(context == null)
return;
// i need to use fragment here.
}
}
如果您需要活动,则最好使用onActivityCreated
在getActivity()
中获得活动。
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
希望您能理解