BindingAdapter是否真的节省了我们的时间

时间:2019-07-03 12:04:53

标签: android kotlin android-adapter android-databinding kotlin-android-extensions

我正在研究新项目,并且刚刚开始使用数据绑定。我听到有人在谈论abaout代码缩减。我有一个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
    }

单个RecyclerView行的ConstraintLayout(删除的定位属性)

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

具有数据绑定的RecyclerView单行的ConstraintLayout(已删除的定位属性)

    <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。我可以重用扩展程序,但是它仍然放在谁的位置上。

您对此有何看法? 我想念什么吗? 使用它有其他好处吗? 谢谢

0 个答案:

没有答案