将一个类绑定到两个布局?
在我的应用程序中,我有一个Product类,它以两种不同的方式显示:一个是包含所有信息的普通卡片,另一个是只显示部分ITS数据的小卡片。
因此,我有两个布局:product_card.xml和product_card_small.xml。
现在,我可以将这两个布局绑定到同一个Product类吗?
两种布局都有:
<data>
<import type="com.MyTest.android.Models.Product"/>
<variable name="product" type="Product"/>
</data>
我有一个productsAdapter,它选择其中一个布局。但是,当我想在其viewHolder中同时使用ProductCardBinding和ProductCardSmallBinding时,只能识别其中一个(ProductCardBinding)。另一个无法解析。
我想知道这是否可能,如果可能,为什么它只解决其中一个问题?
解决方案
我遇到了同样的问题。因为一个XML只能绑定到一个ViewDataBinding,所以基本上不能这样做。我目前的解决方案是使用代理类。在您的示例中,如果ProductCardBinding和ProductCardSmallBinding都有一个TextView和ImageView,则ProductCardBindingProxy如下所示:
class ProductCardBindingProxy {
val someText: TextView
val someImage: ImageView
val viewDataBinding: ViewDataBinding
constructor(productCardBinding: ProductCardBinding) {
viewDataBinding = productCardBinding
someImage = productCardBinding.image
someText = productCardBinding.text
}
constructor(productCardSmallBinding: ProductCardSmallBinding) {
viewDataBinding = productCardSmallBinding
someImage = productCardSmallBinding.image
someText = productCardSmallBinding.text
}
}
然后您可以在onCreateViewHolder
val proxy = ProductCardBindingProxy(viewBinder)
ProductCardViewHolder(proxy)
我认为这不是一个好的解决方案,但这至少可以解决它。:)
相关文章