Видимость зависит от CheckBox в привязке данных - PullRequest
0 голосов
/ 28 апреля 2018

Я хочу установить видимость представления в зависимости от состояния флажка CheckBox. Нечто подобное мы делаем в preference.xml.

В настоящее время я делаю

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    >

    <data>

        <import type="android.view.View"/>

        <variable
            name="isScheduleChecked"
            type="java.lang.Boolean"/>

        <variable
            name="activity"
            type="com.amelio.ui.activities.ActivityCart"/>

    </data>

    <LinearLayout
        style="@style/llDefault"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onCheckedChanged="@{()-> isScheduleChecked}"
            android:text="Checkbox"/>

        <LinearLayout
            style="@style/llDefault"
            android:padding="@dimen/space_small"
            android:visibility="@{isScheduleChecked ? View.VISIBLE : View.GONE, default = gone}"
            >

        </LinearLayout>

    </LinearLayout>

</layout>

Это не работает. Я думаю android:onCheckedChanged="@{()-> isScheduleChecked}" эта строка не работает. Что я делаю не так? Некоторые говорят мне, как лучше всего это реализовать.

В настоящее время я изменяю isScheduleChecked моей деятельностью в Java-коде, например binding.setIsScheduleChecked(true/false);, но я не пишу код в Java-классе для просто установки видимости.

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Самый простой путь я не знал раньше.

Вы можете ссылаться на идентификатор в привязке данных. Не нужно брать другую переменную.

    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Checkbox"/>

    <LinearLayout
        style="@style/llDefault"
        android:padding="@dimen/space_small"
        android:visibility="@{checkbox.isChecked() ? View.VISIBLE : View.GONE, default = gone}"
        >

    </LinearLayout>

Причины, которые могут вызвать проблему

  1. Идентификаторы всегда генерируются в camelCase. как идентификатор check_box, то вы будете использовать checkBox.isChecked().
  2. Вы должны импортировать View в макете, чтобы использовать его View.VISIBLE

    <data>
        <import type="android.view.View"/>
    </data>
    

Если у вас возникли другие проблемы, вы можете оставить комментарий.

0 голосов
/ 29 апреля 2018

Это крутая идея! Я получил его на работу, заменив вашу строку onCheckedChanged на:

android:checked="@={isScheduleChecked}"
...