I have implemented data binding in my project. I have a particular screen with two nested layouts in include tags. I couldn't change the visibility for include layouts using data binding programmatically.
However, I have achieved it through a boolean, but my question is how to set visibility for that include tag programmatically.
My 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"/>
And in Activity: when I try to set this - it becomes red meaning it doesn't take it as a view.
dataBinding.regPhone.setVisibility(View.GONE);
dataBinding.regEmail.setVisibility(View.VISIBLE);
add get root to your view
dataBinding.regPhone.getRoot().setVisibility(View.GONE);
dataBinding.regEmail.getRoot().setVisibility(View.VISIBLE);
A better way.
On the top layout, declare the boolean or an observable field whose value toggle the visibility of the included layout. Then remember to give the included layout an id
else it wont work
<?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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With