Подтвердить что ты не робот

Разница между onCreateView и onViewCreated in Fragment

Какое существенное различие между этими двумя методами? Когда я создаю TextView, должен ли я использовать один над другим для производительности?

Изменить: Какая разница от

onCreateView() {
  root = some view
  View v = new View(some context);
  root.add(v);
  return root;
}


onViewCreated() {
  View v = new View(some context);
  getView().add(v);
}
4b9b3361

Ответ 1

Мы сталкиваемся с некоторыми onCreateView инициализации представления в onCreateView.

Вы должны надуть свой макет в onCreateView но не должны инициализировать другие представления, используя findViewById в onCreateView.

Потому что иногда представление не правильно инициализировано. Поэтому всегда используйте findViewById в onViewCreated (когда представление полностью создано), и оно также передает представление в качестве параметра.

onViewCreated - убедитесь, что представление полностью создано.

onViewСозданная Android-документация

Вызывается сразу после onCreateView (android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle), но до восстановления любого сохраненного состояния в представлении. Это дает подклассам возможность инициализировать себя, как только они узнают, что их иерархия представления полностью создана. Однако на этом этапе иерархия представления фрагмента не привязана к своему родителю.

Ответ 2

onViewCreated вызывается сразу после onCreateView (метод, который вы инициализируете и создаете все ваши объекты, включая ваш TextView), так что это не вопрос производительности.

С сайта разработчика:

onViewCreated (View view, Bundle saveInstanceState)

Вызывается сразу после возврата onCreateView (LayoutInflater, ViewGroup, Bundle), но до восстановления любого сохраненного состояния в представлении. Это дает подклассам возможность инициализировать себя, как только они узнают, что их иерархия представления полностью создана. Однако на этом этапе иерархия представления фрагмента не привязана к своему родителю.

Источник: Фрагмент # onViewCreated

Ответ 3

Лучше выполнять любое задание subviews в полях в onViewCreated. Это связано с тем, что фреймворк выполняет автоматическую проверку нуля, чтобы убедиться, что иерархия представления фрагментов была создана и завышена (если используется файл макета XML) должным образом.

Код фрагмента из: FragmentManger.java

// This calls onCreateView()
f.mView = f.performCreateView(f.getLayoutInflater(f.mSavedFragmentState), null, f.mSavedFragmentState);

// Null check avoids possible NPEs in onViewCreated
// It also safe to call getView() during or after onViewCreated()
if (f.mView != null) {
    f.mView.setSaveFromParentEnabled(false);
    if (f.mHidden) f.mView.setVisibility(View.GONE);
    f.onViewCreated(f.mView, f.mSavedFragmentState);
}

Ответ 4

onCreateView возвращает завышенный вид. OnViewCreated вызывается сразу после onCreateView, а get имеет параметр завышенного представления. Его тип возврата void

Ответ 5

onCreateView() - эквивалент фрагмента onCreate() для операций и выполняется во время создания представления.
onViewCreated() запускает после, представление было создано.

should I use one over the other for performance? НЕТ. Там нет доказательств повышения производительности.

В Framents также есть метод onCreate().

Но он используется редко (я использую никогда), и не могу найти подходящий вариант для него). Я всегда использую onCreateView() в Fragments в качестве замены для onCreate().
И я доволен этим.

Ответ 6

onCreateView используется во фрагменте для создания макета и раздувания. onViewCreated используется для ссылки на представление, созданное вышеуказанным методом. Наконец, это хорошая практика, чтобы определить слушателя действий в onActivityCreated.

Ответ 7

Основная причина, по которой я буду использовать onViewCreated, заключается в том, что она отделяет любую логику инициализации от логики инфляции/создания иерархии представления, которая должна идти в onViewCreate. Все остальные характеристики производительности выглядят одинаково.

Ответ 8

я думаю, что основное различие между ними заключается в том, что когда вы используете kotlin.in onCreateView() каждый раз, когда вы хотите получить доступ к просмотру в своем XML файле, вы должны использовать findViewById, но в onViewCreated вы можете просто получить доступ к своему представлению, просто вызвав его идентификатор,

Ответ 9

Документы для Fragment.onCreateView() теперь гласят:

В этом методе рекомендуется только раздувать компоновку и перемещать логику, которая работает с возвращенным представлением, в onViewCreated (View, Bundle).

Нам не нужно понимать, почему; нам просто нужно сделать, как сказано в документации, но было бы интересно узнать, почему существует эта рекомендация. Мое лучшее предположение - разделение интересов, но ИМХО это делает его немного сложнее, чем должно быть.