Я реализовал привязку данных в моем проекте. У меня есть определенный экран с двумя вложенными макетами в тегах включения. Я не мог изменить видимость включаемых макетов, используя привязку данных программно.

Тем не менее, я добился этого с помощью логического значения, но мой вопрос заключается в том, как программно установить видимость для этого тега включения.

Мой 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"/>

А в Activity: когда я пытаюсь установить это - он становится красным, что означает, что он не воспринимается как вид.

  dataBinding.regPhone.setVisibility(View.GONE);
  dataBinding.regEmail.setVisibility(View.VISIBLE);
2
Poyyamozhi Ramakrishnan 29 Май 2019 в 19:47

2 ответа

Лучший ответ

Добавить получить root на ваш взгляд

dataBinding.regPhone.getRoot().setVisibility(View.GONE);
dataBinding.regEmail.getRoot().setVisibility(View.VISIBLE);
3
mahdi shahbazi 30 Май 2019 в 07:51

Лучший способ.

На верхнем макете объявите логическое или наблюдаемое поле, значение которого переключает видимость включенного макета. Затем не забудьте дать включенному макету 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>
0
Edijae Crusar 13 Янв 2020 в 18:35