2

在我的应用程序中,我有一个Product以两种不同方式显示的类:一张包含所有信息的普通卡片和一张只显示部分数据的小卡片。

所以,我有两种布局:product_card.xmlproduct_card_small.xml.

现在,我可以将这两个布局绑定到同一个Product类吗?

两种布局都有:

<data>
    <import type="com.MyTest.android.Models.Product"/>
    <variable name="product" type="Product"/>
</data>

我有一个productsAdapter选择其中一种布局。但是,当我想在其 viewHolder 中同时使用两者时,只能识别其中之一 ( ProductCardBinding) 。另一个解决不了。ProductCardSmallBindingProductCardBinding

我想知道这是否可能,如果可以,为什么只能解决其中一个问题?

4

2 回答 2

4

我有同样的问题。由于一个 XML 只能绑定一个ViewDataBinding,因此您基本上不能这样做。我目前的解决方案是使用代理类。在您的情况下,如果ProductCardBindingandProductCardSmallBinding都有一个TextViewand 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)

我不认为这是一个好的解决方案,但这至少可以解决它。:)

于 2018-08-24T08:05:20.107 回答
-1

也许你可以这样做。我从不使用它。

<data class=".Item1">
    <import type="com.MyTest.android.Models.Product"/>
    <variable name="product" type="Product"/>
</data>
<data class=".Item2">
    <import type="com.MyTest.android.Models.Product"/>
    <variable name="product" type="Product"/>
</data>
于 2016-01-18T13:32:17.857 回答