在片段类的onViewCreated()方法中访问上下文对象-空上下文情况

时间:2019-03-04 07:31:29

标签: android fragment

我需要在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.
    }
}

1 个答案:

答案 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.
    }
}

如果您需要活动,则最好使用onActivityCreatedgetActivity()中获得活动。

@Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

希望您能理解