如何设置数据绑定中包含布局的可见性?

时间:2019-05-29 16:47:18

标签: java android android-databinding android-jetpack

我已经在我的项目中实现了数据绑定。我有一个特殊的屏幕,在include标签中有两个嵌套的布局。我无法以编程方式使用数据绑定更改包含布局的可见性。

但是,我是通过布尔值实现的,但是我的问题是如何通过编程方式设置包含标签的可见性。

我的xml:

<include
  android:id="@+id/reg_email"
  layout="@layout/custom_email"
  android:layout_width="match_parent"
  android:layout_height="match_parent"/>


<include
  android:id="@+id/reg_phone"
  layout="@layout/custom_phone"
  android:layout_width="match_parent"
  android:layout_height="match_parent"/>

在活动中: 当我尝试设置此值时-它变为红色,表示不会将其视为视图。

  dataBinding.regPhone.setVisibility(View.GONE);
  dataBinding.regEmail.setVisibility(View.VISIBLE);

2 个答案:

答案 0 :(得分:1)

将root添加到您的视图

dataBinding.regPhone.getRoot().setVisibility(View.GONE);
dataBinding.regEmail.getRoot().setVisibility(View.VISIBLE);

答案 1 :(得分:0)

更好的方法。

在顶部布局上,声明布尔值或可观察字段,其值将切换所包含布局的可见性。然后记住给包含的布局一个id,否则将无法工作

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
        <import type="android.view.View"/>
        <variable
            name="show"
            type="Boolean" />
    </data>
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:background="@color/colorPrimary">


        <include layout="@layout/progress"
            android:id="@+id/progress"
            android:visibility="@{show?View.VISIBLE:View.GONE}"/>

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>