我正在互联网上搜索如何通过RadioGroup执行新的酷
Android数据绑定,我没有找到关于它的单一博客文章.
它是一个简单的场景,基于所选的单选按钮,我想使用android数据绑定附加一个回调事件.我没有在xml部分找到允许我定义回调的任何方法.
就像这里是我的RadioGroup:
<RadioGroup android:id="@+id/split_type_radio" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:checkedButton="@+id/split_type_equal" android:gravity="center" <!-- which tag ? --> android:orientation="horizontal"> ... </RadioGroup>
如何附加将在RadioGroup上调用的处理程序方法,checkChnged事件将使用数据绑定触发?
我已尝试在布局文件中使用onClick(不知道它是否相同)并在Activity中定义方法并在布局文件中使用它来定位它:
<variable name="handler" type="com.example.MainActivity"/> ... <RadioGroup android:onClick="handler.onCustomCheckChanged" .. >
和定义方法onCustomCheckChanged如下:
public void onCustomCheckChanged(RadioGroup radio,int id) { // ... }
但是,它给了我编译错误:
Error:(58,36) Listener class android.view.View.OnClickListener with method onClick did not match signature of any method handler.onCustomCheckChanged
解决方法
在深入研究了一堆方法后,我在SO上发现了
this问题,这有助于我理解如何绑定单个侦听器方法.
在RadioGroup侦听器中,您有一个方法onCheckedChanged(RadioGroup g,int id).因此,您可以通过将其实例作为布局文件中的变量传递并调用具有相同签名的方法,将该方法直接绑定到您的处理程序或您的活动.
<RadioGroup android:id="@+id/split_type_radio" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:checkedButton="@+id/split_type_equal" android:gravity="center" android:onCheckedChanged="@{handler.onSplitTypeChanged}" android:orientation="horizontal"> ... </RadioGroup>
在我的活动或处理程序中,我需要简单地为方法提供相同的名称和签名,如下所示:
public void onSplitTypeChanged(RadioGroup radioGroup,int id) { // ... }
只要确保方法是公开的.
注意:这适用于任何(大多数,我没有尝试过所有)监听器方法.与EditText一样,您可以提供android:onTextChanged等.