如何在使用MVVM架构时使用kotlin代码检查radiobuttons?

问题描述 投票:0回答:1

我在我的应用程序中使用MVVM架构,在一个2*2网格中的radiogroup中有4个radiobuttons,但问题是oncheckedChanged在viewmodel类中没有被调用,这是xml代码。

          <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/_10sdp"
            android:checkedButton="@id/singleRadioBtn"
            android:onCheckedChanged="@{viweModel::selectOption}"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <RadioButton

                    android:layout_width="0dp"
                    android:layout_height="@dimen/_30sdp"
                    android:layout_weight="1"
                  ></RadioButton>

                <Space
                    android:layout_width="@dimen/_8sdp"
                    android:layout_height="match_parent" />

                <RadioButton

                    android:layout_width="0dp"
                    android:layout_height="@dimen/_30sdp"
                    android:layout_weight="1"
                   ></RadioButton>
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/_8sdp"
                android:orientation="horizontal">

                <RadioButton

                    android:layout_width="0dp"
                    android:layout_height="@dimen/_30sdp"
                    android:layout_weight="1"
               ></RadioButton>

                <Space
                    android:layout_width="@dimen/_8sdp"
                    android:layout_height="match_parent" />

                <RadioButton
                    android:layout_width="0dp"
                    android:layout_height="@dimen/_30sdp"
                    android:layout_weight="1"
                  ></RadioButton>
            </LinearLayout>
        </RadioGroup>

在viewmodel中

 fun selectOption(radioGroup: RadioGroup, id: Int)
    {
        radioGroup.check(id)
    }

但是上面的函数没有被调用 那么我在这里做错了什么?请大家帮忙

android android-databinding android-mvvm android-radiogroup
1个回答
1
投票

我认为你的问题不在于DataBinding,而是因为你把LinearLayouts放在RadioGroup里面。由于Radiogroup本身就是LinearLayout的一个子类,所以会弄得一团糟,所以一般来说,你必须在代码中做一些额外的事情来使它工作(但是这样的话DataBinding在这种情况下就没有那么有用了),你可以通过讨论看看 此处.

如果你试着把RadioButtons放在RadioGroup里面(没有嵌套的LinearLayouts),我想你的方法应该被调用。

作为一个变通方法,你可以绑定另一个回调--每个RadioButton的 onClick (明确设置RadioGroup的索引)。

//...........
<RadioButton
      android:layout_width="0dp"
      android:layout_height="30dp"
      android:layout_weight="1"
      android:onClick="@{(v) -> viewModel.selectOption(1)}"
></RadioButton>

<Space
     android:layout_width="8dp"
     android:layout_height="match_parent" />

<RadioButton

     android:layout_width="0dp"
     android:layout_height="30dp"
     android:layout_weight="1"
     android:onClick="@{(v) -> viewModel.selectOption(2)}"
></RadioButton>
//...............

UPDATE

其中一个选择--根据你当前的模型使其工作。

  1. 给Radiogroup一个ID(所以它可以被用于绑定表达式)
  2. 给RadioButtons提供ID
  3. 要改变ViewModel中的一点方法。

XML

<RadioGroup
    android:layout_width="match_parent"
    android:id="@+id/radioGroup"
    .......>
<RadioButton
    android:layout_width="0dp"
    android:id="@+id/button1"
    android:onClick="@{(v) -> viewModel.selectOption(radioGroup,v)}" // <- v - is your button

查看模型

fun selectOption(radioGroup: RadioGroup, radioButton: View)
{
    radioGroup.check(radioButton.id)
}
© www.soinside.com 2019 - 2024. All rights reserved.