将一个类绑定到两个布局?
在我的应用程序中,我有一个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)
我认为这不是一个好的解决方案,但这至少可以解决它。:)
相关文章