Android(фрагмент) - рекомендуется ли инициализировать объект представления внутри метода onActivityCreated?

View переменные фрагментов могут быть инициализированы в onCreateViewметод таким образом. Вот TextView находится внутри фрагмента.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragmant_two,container,false);
    if(savedInstanceState == null)
    {

    }
    else
    {
        String data = savedInstanceState.getString("data");
        TextView myText = (TextView)view.findViewById(R.id.text_view);
        myText.setText(data);
    }


    return view;


}

Но я обнаружил, что представление инициализируется внутри onActivityCreated в этом случае.

textView = (TextView) getActivity().findViewById(R.id.text_view);

есть ли причина, по которой я должен выбрать onActivityCreated над onCreateView?

5 ответов

textView = (TextView) getActivity().findViewById(R.id.text_view);

Это попытается найти представление с идентификатором R.id.text_view из макета вашей деятельности, а не вашего фрагмента. Если представление с этим идентификатором присутствует в самом фрагменте, то вы должны использовать onCreateView метод внутри вашего фрагмента.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragmant_two,container,false);
    TextView textView = (TextView) view.findViewById(R.id.text_view);
    // bind your data here.
    return view;
}

Очевидно, что onActivityCreated был использован, потому что представление найдено в Activity.

Вы также можете использовать onAttach для этого, хотя.

Лично в onViewCreated я помещаю инициализации представления фрагмента

Вы можете обратиться к этому вопросу, чтобы понять больше о onActivityCreated и onCreateView здесь

OnCreate():

Метод onCreate () во фрагменте вызывается после onAttachFragment() действия, но перед onCreateView() этого фрагмента. В этом методе вы можете назначать переменные, получать дополнительные функции In tent и все остальное, что не связано с иерархией View (т.е. неграфические инициализации). Это связано с тем, что этот метод можно вызывать, когда onCreate () в Activity не завершен, и попытка получить доступ к иерархии представлений здесь может привести к сбою.

onCreateView():

После вызова onCreate () (во фрагменте) вызывается onCreateView() фрагмента. Вы можете назначить переменные View и выполнить любую графическую инициализацию. Ожидается, что вы вернете представление из этого метода, и это основное представление пользовательского интерфейса, но если ваш фрагмент не использует макеты или графику, вы можете вернуть значение null (происходит по умолчанию, если вы не переопределяете).

onActivityCreated ():

Как следует из названия, он вызывается после завершения onCreate (). Он вызывается после onCreateView() и используется в основном для окончательной инициализации (например, для изменения элементов пользовательского интерфейса).

onCreateView(): здесь вы можете назначить переменные View и выполнить любую графическую инициализацию.

onActivityCreated (): вызывается после onCreateView() и в основном используется для окончательной инициализации (например, для изменения элементов пользовательского интерфейса).

В onCreateView вы не сможете использовать getActivity.findViewByID()

Но вы можете в onActivityCreated.

Я также предлагаю использовать onView Created(). Здесь вы также можете использовать getActivity.findViewByID().

Другие вопросы по тегам