Как запустить обратный вызов после установки свойств XML в пользовательском представлении Android?

#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}" />