安卓:绑定变量并传递到include标签布局,是否可行?

19

我在数据绑定方面遇到了问题。文档中说,我们可以使用include标签来托管自定义布局并向其传递绑定变量。但是当我在4.1.2手机和模拟器上尝试时,数据似乎并没有绑定,只绑定了主要布局字段。

这是我的主要布局代码:

<layout>

<data>
    <variable
        name="Job"
        type="nz.co.certifi.CERTIFI.Model.JobModel" />
</data>

<ScrollView
    android:background="@color/TransparentColor"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/scrollView"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="false"
    android:layout_alignParentEnd="false"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true">


    <RelativeLayout
        android:background="@color/TransparentColor"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <include
            app:Job="@{Job}"
            android:id="@+id/layoutCertification"
            layout="@layout/view_certification_control"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"/>

这是布局认证:

<layout>
<data>
    <variable
        name="Job"
        type="nz.co.certifi.CERTIFI.Model.JobModel" />
    <variable
        name="Form"
        type="nz.co.certifi.CERTIFI.Model.FormROIModel" />
</data>

<nz.co.certifi.CERTIFI.Control.EditTextWithModel
    xmlns:sparkNS="http://schemas.android.com/apk/res/nz.co.certifi.CERTIFI"
    sparkNS:modelProperty="CertificateId"
    sparkNS:modelType="JobModel"
    sparkNS:validationType="required_only"
    android:contentDescription="Job: Form Certificate Id"
    sparkNS:errorRequiredMessage="@string/error_reference_no_required"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="@string/activity_roi_step_one_hint_reference_no"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="@{Job == null? Form.certificateId : Job.certificateId}"
    android:textStyle="bold"
    android:id="@+id/txtReferenceNo"
    android:layout_alignParentTop="false"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_toLeftOf="@+id/btnReference"
    android:layout_toStartOf="@+id/btnReference"
    android:layout_centerVertical="true" />
1个回答

23

是的,它可以。http://developer.android.com/tools/data-binding/guide.html#includes

主要布局

<data>

    <variable
        name="plu"
        type="org.test.test.viewmodels.PluDetailViewModel" />
</data>
.
.
.
  <include
          layout="@layout/keypad_pludetail"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_alignParentStart="true"
          bind:plu="@{plu}"
                        />

包含的布局

<data>

    <variable
        name="plu"
        type="org.test.test.viewmodels.PluDetailViewModel" />
</data>
.
.
.
 <Button
                android:id="@+id/keypad_accept"
                style="@style/KeyPadButton"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:text="@string/keypad_accept"
                android:enabled="@{plu.isOK}"
                android:onClick="@{plu.confirm}"
              />

在片段中

    binding = DataBindingUtil.inflate(inflater, R.layout.fragment_plu_details, container, false);
    binding.setPlu(pluDetailViewModel);
    binding.executePendingBindings();

评估待处理的绑定,更新任何表达式绑定到修改变量的视图。http://developer.android.com/reference/android/databinding/ViewDataBinding.html - pfulop
谢谢,我会尝试一下...当我在4.4.2及以上版本中使用它时,我不需要那个语句,视图已经获取了数据。 - LittleFunny
我遇到了一些数据为空的情况,主要是在使用recyclerview时。这就是为什么我使用它的原因。当然,并不是所有时候都需要使用。 - pfulop
我已经尝试了这种方法,它是有效的。为什么我们要单独调用它,而不是将其集成到setPlu方法中呢? - LittleFunny
那是Yigit Boyar或George Mount的问题,但如果我要猜的话,它都与可重用性有关。 - pfulop
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接