Cómo vincular el método en RadioGroup en evento checkChanged con vinculación de datos

Yo estaba buscando en Internet para la forma de realizar la nueva androide de datos de datos vinculante sobre el RadioGroup y no encontré una sola entrada del blog sobre él.

Su un escenario simple, basado en el botón de opción seleccionado, quiero adjuntar un evento de devolución de llamada utilizando enlace de datos de Android. No encuentro ningún método en la parte xml que me permite definir una devolución de llamada.

Como aquí está mi 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> 

¿Cómo puedo adjuntar un método de RadioGroup que será llamado en el evento checkChnged se disparará mediante enlace de datos?

He intentado usar onClick (no sé si es lo mismo) en el archivo de diseño y el método de definición en la actividad y lo encontré usando esto en el archivo de diseño:

  <variable name="handler" type="com.example.MainActivity"/> ... <RadioGroup android:onClick="handler.onCustomCheckChanged" .. > 

Y el método definido onCustomCheckChanged como este:

 public void onCustomCheckChanged(RadioGroup radio, int id) { // ... } 

Pero, me da el error de compilación:

Error: (58, 36) Clase del oyente android.view.View.OnClickListener con el método onClick no coincide con la firma de ningún método handler.onCustomCheckChanged

He visto muchos blogs mencionando que es posible con RadioGroup pero no de ellos realmente decir cómo. ¿Cómo puedo manejar esto con data-binding ?

Después de excavar en el montón de métodos, encontré esta pregunta en SO que me ayudó a entender cómo vincular los métodos individuales de los oyentes.

Esto es lo que debe hacer con RadioGroup:

En el receptor de RadioGroup tiene un método onCheckedChanged(RadioGroup g, int id) . Por lo tanto, puede vincular directamente ese método a su controlador o su actividad pasando una instancia de él como una variable en el archivo de diseño y llamando a un método con la misma firma.

Así que llame al archivo de diseño como este:

  <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> 

Y en mi actividad o manejador, necesito simplemente proveer el método con el mismo nombre y firma como esto:

 public void onSplitTypeChanged(RadioGroup radioGroup,int id) { // ... } 

Sólo asegúrese de que el método es público.

NOTA: Esto funciona para cualquiera (la mayoría de, no he probado todos) los métodos de escucha. Al igual que para EditText puede proporcionar android:onTextChanged y así sucesivamente.

  • ¿Cómo hago que Espresso espere hasta que Data Binding haya actualizado la Vista con el modelo de datos?
  • Realm.io / Dagger / Databinding en el mismo proyecto
  • No se puede crear después de actualizar a Android Studio 2.3
  • DataBinding no funciona después de la actualización de Android Studio 2.3
  • Cómo utilizar la vinculación de datos con Fragment
  • Android Studio 2.2 vista previa lanzar error al implementar enlace de datos
  • Vinculación de Android y prueba JUnit de notificación
  • ¿Cómo utilizar Spinner en Recyclerview?
  • Cómo utilizar Data Binding y Kotlin en Android Studio 3.0.0
  • Práctica recomendada para Android MVVM startActivity
  • ¿Dónde colocar el método androide BindingAdapter?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.