OnCreateView () не вызывается сразу после FragmentTransaction.commit ()

У меня есть активность, где я динамически заменяю фрагменты:

private void goToFragment(Fragment newFragment, String tag) { FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.fragment_container, newFragment, tag); ft.addToBackStack(null); ft.commit(); } 

Теперь я хочу получить доступ к представлениям внутри фрагмента, чтобы я мог поместить в него данные (которые я сохранил в своей деятельности) сразу после вызова goToFragment .

Проблема в том, что onCreateView фрагмента не onCreateView до того, как фрагмент будет полностью отрисован, по крайней мере, до моего понимания.

Я знаю, что переопределение onAttach(Activity activity) в фрагменте – это один из способов его решения, но затем я должен указать его конкретно на мою деятельность – и я просто хочу этого избежать, потому что считаю, что плохая практика для фрагмента В зависимости от конкретной деятельности.

Насколько я могу судить, у Fragment нет слушателей (как предмет).

Поэтому я полагаю, что должен сделать свой собственный слушатель (используя шаблон Observer, чтобы сделать фрагмент объектом и активным наблюдателем), а затем вызывать его всякий раз, когда выполняется onCreateView или onAttach , а затем, наконец, onAttach к фрагменту с помощью Данные, которые необходимо установить. Тем не менее, мне нужно сделать это для нескольких фрагментов, поэтому мне нужно будет сделать слушатель для каждого фрагмента, который я снова считаю плохим.

Есть ли лучший / более простой способ сделать это?

Solutions Collecting From Web of "OnCreateView () не вызывается сразу после FragmentTransaction.commit ()"

FragmentTransaction не применяется сразу после вызова commit() . Вы можете принудительно выполнить обновление вручную:

 ... mFragmentManager.executePendingTransactions(); 

Задача обратного вызова события AFAIK – это обычная связь с Fragment за пределами обычного жизненного цикла.

Правильный способ сделать это – определить интерфейс для классов Activity которые должны демонстрировать ваш Fragment . Таким образом, onAttach вы не применяете определенную Activity но к вашему интерфейсу.

См. Например: http://developer.android.com/guide/topics/fundamentals/fragments.html#EventCallbacks

Вы должны использовать onActivityCreated для установки значений.

Установите ссылки в onCreateView а затем установите для них значения в onActivityCreated .