Мне действительно интересно узнать, как определить (из внешнего класса), если фрагмент onCreateView()
уже вызван. Я искал похожие вопросы, но не нашел их.
Например, есть fragment.isAdded()
хороший индикатор?
Моя первая мысль была просто fragment.getView() != null
, но я не уверен на 100%, что она будет надежной, как кажется, и я также немного неохотно ее использую (без какой-либо конкретной причины я просто стараюсь избегать недействительности чеки). Я был бы рад найти обходной путь. Предложения у меня были:
isAdded()
Возвращает true, если фрагмент в настоящее время добавлен к его активности.
Эта линия довольно неоднозначна, на мой взгляд; добавлено не прилагается, но не создано. Он может ссылаться на FragmentTransaction.add()
(что семантически неправильно, потому что вы можете иметь <fragment>
, застрявшую в вашем макете, без вызова add
или replace
).
Тем не менее, FragmentTransaction.add()
документация не дает информации и не думает added -> created
. Я бы сказал, нет.
IsVisible()
Возвращает true, если фрагмент в настоящее время отображается пользователю. Это означает, что он: (1) был добавлен, (2) имеет вид, прикрепленный к окну, и (3) не скрыт.
Выглядит хорошо, в том смысле, что isVisible() -> isCreated
, но третий вариант делает его isCreated != isVisible
. Я просто думаю о фрагментах внутри пейджера представления: не все видимы, но фрагменты рядом с видимым в данный момент фрагментом добавляются, создаются и живы, вы можете вызывать методы на них. Но для них isVisible() == false
. Это слишком строго.
isInLayout()
Возвращает true, если макет включен как часть вида активности иерархии через < фрагмент > . Это всегда будет верно, когда фрагменты создаются посредством < фрагмент > , за исключением случая где старый фрагмент восстанавливается из предыдущего состояния, и он делает не отображаются в макете текущего состояния.
Я не думаю, что это применимо здесь.
getView()!= null
Возвраты Корневой вид фрагмента, или null, если он не имеет макета.
Это все еще выглядит единственно возможным решением. Я просто хотел бы подтвердить это.
Внедрить обратный вызов
.. называться onCreateView()
или, лучше, onViewCreated()
. Но:
- Мне не нужно вызывать что-то, как только будет создан фрагмент (зачем вам это нужно?), мне нужно что-то проверить в данный момент;
- Следует определить противоположное, скажем, onViewNotAvailableAnymore(), чтобы сделать проверку значимой в любое время;
- Я не вижу, как это было бы иначе или лучше, чем
getView != null
.