【问题标题】:Android: Does binding variable and passing to include tag layout work?Android:绑定变量和传递包含标签布局是否有效?
【发布时间】:2016-03-30 16:44:57
【问题描述】:

我遇到了数据绑定问题。在文档中,它说我们可以使用 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" />

【问题讨论】:

    标签: android data-binding include


    【解决方案1】:

    是的。 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();
    

    【讨论】:

    • 评估挂起的绑定,更新任何将表达式绑定到已修改变量的视图。developer.android.com/reference/android/databinding/…
    • 谢谢,我会试试看...当我在 4.4.2 及更高版本上使用它时,我不需要该语句并且视图获得了数据。
    • 当数据为空时,我有几个场景,主要是在我使用 recyclerview 时。这就是我使用它的原因。当然也不必一直使用。
    • 方法我试过了。。为什么要单独调用,而不是集成到setPlu方法中。
    • 嗯,这是 Yigit Boyar 或 George Mount 的问题,但如果我猜的话,这完全是关于可重用性。
    猜你喜欢
    • 2016-03-21
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2020-02-01
    • 2021-07-01
    相关资源
    最近更新 更多