我正在研究新项目,并且刚刚开始使用数据绑定。我听到有人在谈论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。我可以重用扩展程序,但是它仍然放在谁的位置上。
您对此有何看法? 我想念什么吗? 使用它有其他好处吗? 谢谢