[Android] onCreateView () не вызывается сразу после FragmentTransaction.commit ()


Answers

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

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

Question

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

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) в фрагменте - это один из способов его решения, но тогда я должен конкретно onAttach(Activity activity) его на свою деятельность - и я просто хочу этого избежать, потому что считаю, что плохая практика для этого фрагмента в зависимости от конкретной деятельности.

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

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

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