查看依赖于数据绑定中 CheckBox 的可见性

Khe*_*raj 7 checkbox android android-layout android-databinding

我想根据 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>
Run Code Online (Sandbox Code Playgroud)

这不起作用。我认为android:onCheckedChanged="@{()-> isScheduleChecked}"这条线不起作用。我在做什么错?有些人告诉我实现它的最佳方法。

目前,我正在通过我在 Java 代码中的活动更改 isScheduleChecked,binding.setIsScheduleChecked(true/false);但我不会为了设置可见性而在 Java 类中编写代码。

Ala*_*opf 5

这是一个很酷的主意!我通过将您的onCheckedChanged线路替换为以下内容来使其工作:

android:checked="@={isScheduleChecked}"
Run Code Online (Sandbox Code Playgroud)

  • @ 和 { 之间的“=”使其成为双向绑定。这意味着当您更改视图上的值时,它会更改它绑定到的变量(一种绑定方式只会根据变量更改更新视图)。例如,您可以使用它从用户那里获取输入文本。`checked` 属性反映了 CheckBox 的当前状态,并将根据用户选中/取消选中更新为 true/false。我尝试使用与您类似的事件,但我只能找到如何调用方法,而不是赋值表达式。请让我知道这对你有没有用。 (3认同)

Khe*_*raj 5

我以前不知道最简单的方法。

可以参考数据绑定中的id。无需采用另一个变量。

    <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>
Run Code Online (Sandbox Code Playgroud)

可能导致问题的原因

  1. Id 总是在camelCase. 就像 idcheck_box那么你会使用checkBox.isChecked().
  2. 您必须View在布局中导入才能使用它View.VISIBLE

    <data>
        <import type="android.view.View"/>
    </data>
    
    Run Code Online (Sandbox Code Playgroud)

如果您有任何其他问题,那么您可以发表评论。