#android #kotlin
#Android #kotlin
Вопрос:
Я создал пользовательское представление Android, MyCustomView
которое имеет свойство class MySpecialClass
, которое задается через XML.
<com.example.MyCustomView
app:mySpecialValue="@{viewModel.mySpecialValue}" />
class MyCustomView(context: Context, attributes: AttributeSet) : ConstraintLayout(context, attributes) {
lateinit var mySpecialValue: MySpecialClass
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
Log.d("Tag", ${this::mySpecialValue.isInitialized})
// Prints true - mySpecialValue is initialized!
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
}
}
Я хотел бы выполнить некоторый код вскоре после mySpecialValue
инициализации. Он не инициализируется в конструкторе или в нескольких других методах жизненного цикла, которые я пробовал ( onFinishInflate
, onAttachedToWindow
). Есть ли какое-либо событие или метод жизненного цикла, который был бы хорошим местом для этого (лучше, чем onMeasure
)?
Ответ №1:
Я бы использовал привязку данных Android и создал установщик для mySpecialValue
класса пользовательского представления.
fun setSpecialValue(value: mySpecialClass) {
// your logic
}
XML:
<com.example.MyCustomView
app:setSpecialValue="@{viewModel.mySpecialValue}" />