【问题标题】:Binding one class to two layouts?将一个类绑定到两个布局?
【发布时间】:2020-03-04 08:56:31
【问题描述】:

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

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

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

两种布局都有这个:

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

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

我想知道有没有可能,如果有,为什么只能解决其中一个问题?

【问题讨论】:

  • 不确定这是否有帮助,您是否检查过文档中的包含部分? developer.android.com/tools/data-binding/guide.html#includes
  • @Yazan,我对数据绑定和只绑定一个布局没有任何问题。问题在于两个布局绑定到一个类...
  • 好的,所以它们不会同时显示,抱歉我误解了你的问题
  • 请添加适配器代码。有可能。看起来你做错了什么。

标签: android android-layout android-databinding


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 2011-08-26
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 2017-07-06
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多