Ejemplo de enlace de datos de 2 vías de android no funcionan como se describe

He leído este artículo sobre enlace de datos de 2 vías android

Me di cuenta de que el código es un poco vago y decidir implementar un ejemplo viable y ponerlo en github, por lo que otros chicos será mucho más fácil de buceo en él. Pero siguiendo las instrucciones proporcionadas en este artículo no pude hacer que funcione.

En mi ejemplo sólo tengo actividad principal con switcher, y control personalizado, también con switcher. Por lo tanto, al revisar el conmutador principal que actualizar todas las cosas correctamente y trabajar como se espera, pero sin embargo, cuando comprobar / desmarcar conmutador interno, no afectan principal viewmodel y nada en la actividad – por lo que 2 enlace no funciona.

Por favor, ayúdame a encontrar la razón por la cual esto sucede y arreglar el problema.


Código fijo y ahora funcionaba como se esperaba en Android Studio 2.2 beta 1 al menos.

Enlace al ejemplo de código en github

Casi has conectado todo correctamente. En CustomSwitcher, no hubo notificación cuando cambió el valor del conmutador interno. Debe escuchar el cambio y llamar a la devolución de llamada onValChanged.

Aquí está su código:

public CustomSwitcher(Context context, AttributeSet attrs) { super(context, attrs); this.binding = CustomSwitcherBinding.inflate(LayoutInflater.from(context), this, true); } public void setVm(boolean vmVal){ this.vm = vmVal; this.binding.setItem(vm); } 

El enlace inflado no notifica directamente al conmutador personalizado, por lo que debe escuchar el evento. Entonces tendrás que llamar al oyente. También debe evitar el bucle infinito de notificar el mismo valor repetidamente asegurando que no está configurando el mismo valor que ya existe.

 public CustomSwitcher(Context context, AttributeSet attrs) { super(context, attrs); this.binding = CustomSwitcherBinding.inflate(LayoutInflater.from(context), this, true); this.binding.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { @Override public void onPropertyChanged(Observable sender, int propertyId) { if (propertyId == BR.item) { setVm(binding.getItem()); } } }); } public void setVm(boolean vmVal){ if (vmVal != this.vm) { this.vm = vmVal; this.binding.setItem(vm); if (this.onValChanged != null) { this.onValChanged.onValChanged(this, vmVal); } } } 
  • La vinculación de datos de Android hace que la aplicación se bloquee cuando se utiliza una etiqueta de inclusión en un grupo de usuarios no root
  • Uso de enlace de datos en error android: package *. *. Databinding no existe
  • Vinculación de datos de Android vs findViewById para el rendimiento
  • Enlace de datos de Android layout_width y layout_height
  • Enlace de datos de Android: 'No se encontró identificador de recurso para el atributo'
  • Android - DataBinding - ¿Cómo y cuándo se generarán las clases de enlace?
  • Posible motivo de "Error: no se pueden generar carpetas de vista java.lang.NullPointerException"
  • Android Databinding atributo xml duplicado
  • Error de enlace de datos: sólo se permite un elemento de diseño y un elemento de datos.
  • Edittext cursor restablecer a la izquierda después de la actualización de datos de datos de Android
  • Error de DataBinding de Android. No se pudo encontrar el complemento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.