我在我的应用程序中使用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)
}
但是上面的函数没有被调用 那么我在这里做错了什么?请大家帮忙
我认为你的问题不在于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
其中一个选择--根据你当前的模型使其工作。
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)
}