Android数据绑定,单选按钮不更新

时间:2016-02-15 18:48:52

标签: android android-layout data-binding radio-button

我有一些RadioButtons,我希望在模型更改时检查/取消选中它们,使用数据绑定。
我设法建立了一个EditText,它工作正常 无论如何,RadioButtons的行为与android:checked属性不同。

<RadioButton 
    android:id="@+id/radio_kitchen"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/kitchen"
    android:checked="@{radiator.room==@string/kitchen?true:false}"
/>

3 个答案:

答案 0 :(得分:1)

这就是我目前正在为此做的事情:

        <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="@{() -> car.setModel(@string/car_model_toyota)}"
        android:checked="@{car.model.equals(@string/car_model_toyota)}"
        android:text="@string/car_model_toyota"/>

它的作弊因为我给View提供了一些代码逻辑...但至少我不必在每个单片组上实现onchange监听器而且我仍然得到绑定发生...

除非有人纠正我并给我一个更道德和专业的解决方案,否则我认为我会坚持使用这个。

答案 1 :(得分:0)

这个答案可能太迟了,但是其他遇到此问题的人可以尝试一下:

XML:

<?xml version="1.0" encoding="utf-8"?>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <RadioButton android:id="@+id/radio_pirates"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Iron Man"
        android:onClick="buttonClicked"/>
    <RadioButton android:id="@+id/radio_ninjas"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Batman"
        android:onClick="buttonClicked"/>
</RadioGroup>

活动:

public void buttonClicked(View view) {
    // Is the button now checked?
    boolean checked = ((RadioButton) view).isChecked();

    // Check which radio button was clicked
    switch(view.getId()) {
        case R.id.iron_man:
            if (checked)
                // Iron man is the best!
            break;
        case R.id.batman:
            if (checked)
                // Batman rocks!
            break;
    }
}

这是我在Android开发人员page上找到的方法。

答案 2 :(得分:0)

您可以为每个单选按钮创建自定义ID,并使用radiogroup的android:checkedButton通过双向数据绑定保留单选按钮的选中状态。

对于单选按钮的值,您可以根据业务逻辑使用android:onClick属性具有特定的值

 <RadioGroup
            android:checkedButton="@={signUpModel.genderId}"
            app:layout_constraintLeft_toLeftOf="parent"
            android:layout_marginTop="16dp"
            app:layout_constraintTop_toBottomOf="@id/headerGender"
            android:orientation="horizontal"
            android:layout_width="wrap_content" android:layout_height="wrap_content">

        <RadioButton
                android:id="@+id/female"
                android:onClick="@{() -> signUpModel.setGender(@string/cd_female)}"
                android:background="@drawable/bg_gender_cta_selector"
                android:button="@drawable/ic_gender_female"
                android:layout_width="wrap_content" android:layout_height="wrap_content"
                android:contentDescription="@string/cd_female"/>

        <RadioButton
                android:id="@+id/male"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                android:onClick="@{() -> signUpModel.setGender(@string/cd_male)}"
                android:button="@drawable/ic_gender_male"
                android:background="@drawable/bg_gender_cta_selector"
                android:layout_width="wrap_content" android:layout_height="wrap_content"
                android:contentDescription="@string/cd_male"/>
    </RadioGroup>

ids.xml(内部值)

<resources>
<item name="female" type="id" format="string"/>
<item name="male" type="id" format="string"/>
</resources>