доступ к объекту контекста в методе onViewCreated () класса фрагмента - случай нулевого контекста - PullRequest
0 голосов
/ 04 марта 2019

Мне нужно использовать контекст в методе onViewCreated () Fragment.В некоторых случаях контекст может быть нулевым в производстве.В моих тестах я не сталкивался с этим делом.Я читаю похожие вопросы и делаю вывод о приведенном ниже решении, однако я не уверен, что это хорошая практика или нет, и, как я сказал ранее, я не сталкиваюсь со случаем неудачи в тесте.Будем благодарны за любые предложения.

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 голосов
/ 04 марта 2019

Для проверки нулевого контекста в 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.
    }
}

А если вам нужно Activity, то лучше получить действие в onActivityCreated, используяgetActivity().

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

Надеюсь, вы понимаете.

...