Итак, вот как выглядит мой Kotlin класс для моего пользовательского представления:
class MyCustomView(
context: Context,
attrs: AttributeSet
) : ConstraintLayout(context, attrs) {
companion object {
@StyleableRes
private const val NAME_TEXT_ATTR_INDEX = 1
private const val DEFAULT_TEXT_VALUE = ""
}
private lateinit var firstValue: TextView
private lateinit var firstLabel: TextView
private lateinit var secondValue: TextView
private lateinit var secondLabel: TextView
private lateinit var thirdValue: TextView
init {
View.inflate(context, R.layout.view_details_section, this)
initComponents()
initAttributes(attrs)
}
private fun initComponents() {
firstValue = findViewById(R.id.purchase_date_value)
secondValue = findViewById(R.id.total_value)
thirdValue = findViewById(R.id.returning_units_values_value)
firstLabel = findViewById(R.id.purchase_date)
secondLabel = findViewById(R.id.total)
}
private fun initAttributes(attrs: AttributeSet) {
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.DetailsSectionView)
val existsPendingDays = typedArray.getBoolean(R.styleable.DetailsSectionView_existsPendingDays,false)
val firstValue = typedArray.getText(R.styleable.DetailsSectionView_firstValue) ?: DEFAULT_TEXT_VALUE
val secondValue = typedArray.getText(R.styleable.DetailsSectionView_secondValue) ?: DEFAULT_TEXT_VALUE
val thirdValue = typedArray.getText(R.styleable.DetailsSectionView_thirdValue) ?: DEFAULT_TEXT_VALUE
val fourthValue = typedArray.getText(R.styleable.DetailsSectionView_fourthValue) ?: DEFAULT_TEXT_VALUE
val fifthValue = typedArray.getText(R.styleable.DetailsSectionView_fifthValue) ?: DEFAULT_TEXT_VALUE
typedArray.recycle()
setFirstValue(firstValue)
setSecondValue(secondValue)
setThirdValue(thirdValue)
}
fun setFirstValue(value: CharSequence) {
evaluate(value, firstValue)
}
fun setSecondValue(value: CharSequence) {
evaluate(value, secondValue)
}
fun setThirdValue(value: CharSequence) {
evaluate(value, thirdValue)
}
}
Как видите, класс Kotlin излишне безобразен. Оригинал содержит 3x того, что представлено в этом фрагменте. Я думаю, что это можно улучшить с помощью DataBinding. Я мог бы избавиться от findViewByID и сеттеров. Я также думал о свойствах kotlin syntheti c, но остальная часть команды думала, что это не будет хорошим решением. Так что DataBinding это так. Однако я не уверен, что это может быть реализовано в таком сценарии?