Разница между 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); } 

Solutions Collecting From Web of "Разница между onCreateView и onViewCreated in Fragment"

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

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

OnViewCreated (Просмотреть представление, Bundle savedInstanceState)

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

Лучше делать какое-либо присвоение onViewCreated полям в onViewCreated . Это связано с тем, что фреймворк выполняет автоматическую проверку нуля, чтобы убедиться, что иерархия представлений Fragment была создана и завышена (если используется файл макета 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's 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); } 

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

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

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

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

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

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

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

В onCreate() метод onCreate() .

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

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

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