it-swarm.com.ru

Разница между onCreateView и onViewCreated во фрагменте

В чем принципиальная разница между этими двумя методами? Когда я создаю 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);
}
66
Smith

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

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

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

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

36
Xar E Ahmer

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

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

onViewCreated (View view, Bundle saveInstanceState)

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

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

32
u3l

Лучше сделать любое назначение подпредставлений для полей в 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'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);
}
21
orangemako

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

12
Blackbelt

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

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

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

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

4
Fantômas

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

2
Shahriar enayaty

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

0
Salu Khadka

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

0
AmeyaB