Действительно ли BindingAdapter экономит наше время? - PullRequest
0 голосов
/ 03 июля 2019

Я работаю над новым проектом и только начал использовать Databinding.Я слышал, как люди говорят о сокращении кода. У меня есть фрагмент RecyclerView.У меня есть простой ConstraintLayout, в котором у меня есть 3 TextViews.Это в моем адаптере для RecyclerView.

Этот дополнительный + "nazv" является просто примером, и я мог бы использовать расширение строки.

    fun bind(item: Mkdo) {
        binding.txtMkdoNaziv.text = item.nazv+" nazv"
        binding.txtMkdoPost.text = item.post
        binding.txtmkdoPostNaziv.text = item.postNaziv
    }

ConstraintLayout для отдельной строки RecyclerView (удаленные свойства позиционирования)

<androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintRowMkdo" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    <TextView
            android:id="@+id/txtMkdoNaziv"/>
    <TextView
            android:id="@+id/txtMkdoPost"/>
    <TextView
            android:id="@+id/txtmkdoPostNaziv"/>
</androidx.constraintlayout.widget.ConstraintLayout>

Работает просто отлично.Если я хочу преобразовать его в привязку данных, я должен добавить:

        fun bind(item: Mkdo) {
        binding.mkdo=item
        binding.executePendingBindings()
    }

и BindingAdapter

@BindingAdapter("setNazv")
fun TextView.setNazv(item:Mkdo?){
    item?.let {
    text="${item.nazv} nazv"
    }
}

ConstraintLayout для отдельной строки RecyclerView (удаленные свойства позиционирования) с привязкой данных

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintRowMkdo" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    <TextView
            android:id="@+id/txtMkdoNaziv"
            app:setNazv="@{mkdo}""/>
    <TextView
            android:id="@+id/txtMkdoPost"
            android:text="@{mkdo.post}"/>
    <TextView
            android:id="@+id/txtmkdoPostNaziv"
            android:text="@{mkdo.postNaziv}"/>
</androidx.constraintlayout.widget.ConstraintLayout>

Это делает constraintRowMkdo повторно используемым и, на мой взгляд, добавляет больше работы, чем без него.

Также, если у меня есть форматирование строки, мне нужно иметь его в двух местах: строку Extension и BindingAdapter.Я могу повторно использовать Extension, но он все еще зависит от того, кто его ставит.

Какие у вас проблемы с этим?Я что-то пропустил?Есть ли дополнительные преимущества его использования?Спасибо

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