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
не вызывается до того, как фрагмент будет полностью отрисован, по крайней мере, до моего понимания.
Я знаю, что переопределение onAttach(Activity activity)
во фрагменте - это один из способов его решения, но затем я должен его конкретно указать на свою активность - и я просто хочу этого избежать, потому что считаю, что это плохая практика для фрагмента зависит от конкретной деятельности.
Насколько я понимаю, Fragment
не имеет прослушивателей (как объекта).
Итак, я полагаю, что должен сделать свой собственный слушатель (используя Pattern наблюдателя, чтобы сделать фрагмент объектом и активным наблюдателем), а затем вызывать его всякий раз, когда выполняются onCreateView
или onAttach
, а затем, наконец, обращается к фрагменту с данными, которые необходимо установить. Тем не менее, мне нужно сделать это для нескольких фрагментов, поэтому я должен был бы сделать слушатель для каждого фрагмента, который я снова считаю плохим.
Есть ли лучший/более простой способ сделать это?
Ответы
Ответ 1
FragmentTransaction
не применяется сразу после вызова commit()
. Вы можете принудительно обновить вручную:
...
mFragmentManager.executePendingTransactions();
Назначение вызовов AFAIK-события - это пользовательская связь с Fragment
за пределами обычного жизненного цикла.
Ответ 2
Правильный способ сделать это - определить интерфейс для классов Activity
, желающих отобразить ваш Fragment
. Таким образом, на onAttach
вы не перейдете к определенному Activity
, а к вашему интерфейсу.
См. например: http://developer.android.com/guide/topics/fundamentals/fragments.html#EventCallbacks
Ответ 3
Вы должны использовать onActivityCreated
для установки значений.
Задайте ссылки в onCreateView
, а затем установите для них значения в onActivityCreated
.