Пользовательский класс просмотра улучшить читаемость с DataBinding? - PullRequest
0 голосов
/ 28 апреля 2020

Итак, вот как выглядит мой 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 это так. Однако я не уверен, что это может быть реализовано в таком сценарии?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...