Где findViewTreeLifecycleOwner() следует вызывать в пользовательском представлении?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Где findViewTreeLifecycleOwner() следует вызывать в пользовательском представлении?

Сообщение Anonymous »

Фрагмент 1.3.0 представил метод view.findViewTreeLifecycleOwner() для получения владельца жизненного цикла представления. Во фрагменте этот метод возвращает значение null перед onViewCreated().
Мне нужно выполнить некоторую инициализацию в пользовательском представлении с использованием сопрограмм, поэтому мне нужно вызвать findViewTreeLifecycleOwner().lifecycleScope, чтобы получить область действия сопрограммы. Как лучше всего вызывать его в представлении?
Сначала я попытался вызвать его в конструкторе, так как он создан для инициализации, но он вызывается перед onViewCreated() фрагмента, поэтому метод возвращает значение null.
Поэтому я попытался поместить его в onAttachedToWindow(), и там это работает, но я действительно не знаю, хорошая ли это идея - делать инициализацию здесь.
class TestView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : LinearLayout(context, attrs, defStyleAttr) {

init {
// return null here as constructor is called before fragment's onViewCreated()
findViewTreeLifecycleOwner()!!.lifecycleScope.launchWhenStarted {
...
}
}

override fun onAttachedToWindow() {
super.onAttachedToWindow()
// here it works because it's called after fragment's onViewCreated()
findViewTreeLifecycleOwner()!!.lifecycleScope.launchWhenStarted {
...
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/661 ... ustom-view
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»