Android vinculación de datos (similar a WPF)?

He buscado algunas preguntas similares antes de publicar – sin embargo tengo una pregunta general cuando se trata de Android y enlace de datos (y las otras respuestas que compruebo realmente no me llego mucho más …). Supongamos que tiene una clase Vehículo:

public class Vehicle { private Owner owner; private String brand; //getter and setter for above attributes... } 

Y aquí está la clase Owner ….

 public class Owner { private String name; } 

Ahora – yo estaba recientemente mirando en MVVM (ModelView-ViewModel) patrón utilizado por Microsofts WPF. Lo que me hizo preguntarse: Suponiendo que me gustaría obligar a la propiedad de nombre de mi objeto de propietario que es un niño del objeto de vehículo – ¿habría alguna manera estándar en Android para lograr esto? También presumiendo, que podría tener que validar la entrada antes de que pueda tener el modelo actualizado?

Estaba imaginando los siguientes componentes (asumiendo MVVM):

  • La vista (una actividad) no contiene ninguna lógica de aplicación, por lo que su más o menos vacío
  • Un ViewModel podría manejar la instancia del objeto Vehicle y realizar acciones en él
  • El propio modelo se vería como el código que he publicado antes – totalmente ajeno a la vista y el ViewModel

Ahora, cuando añado mi EditTexts, TextViews y así sucesivamente a la vista, quiero que se unan a ciertas las propiedades de mi objeto de contexto (Vehículo en este caso) … Mhhh si mi pregunta no está clara o necesita más información Hágamelo saber 🙂 gracias de antemano.

Ps Creo que la gente familiarizada con WPF podría ahora lo que quiero decir? Yo mismo acabo de leer sobre WPF y encontré que es una buena manera de manejar cosas.

PPs Soy consciente del proyecto de vinculación de Android , pero me preguntaba si hay una especie de construir-en el enfoque en Android o tal vez alguna convención de que alguien está siguiendo 🙂 esto realmente es más de una cuestión vinculante teoría, supongo …

No hay nada "al horno" en el SDK de Android que proporciona la funcionalidad de enlace de datos equivalente que se encuentra en MS WPF. Google está proporcionando una interfaz de menor nivel para los distintos dispositivos que ejecutan Android. Hasta la fecha, los marcos de aplicación de nivel superior no han surgido de la comunidad de desarrollo de Android. (IMHO, se necesitaría una compañía monstruosa como Google para crear tal cosa, dadas todas las diferentes restricciones en un marco para todos los diversos dispositivos Android).

Puede crear un conjunto de clases de enlace de datos en su propia aplicación para manejar sus necesidades para el patrón MVVM. Los "Databinders" establecerían los manejadores de eventos relevantes en los objetos de Android View y ejecutarían algún método apropiado en sus objetos ViewModel en respuesta. También traducirán los eventos de cambio (que usted define) en el ViewModel en las asignaciones de propiedad apropiadas en los objetos Ver.

Si resulta que vale la pena para su aplicación es una llamada de juicio. Mi conjetura es que requeriría más esfuerzo escribir las clases de Databinder que apenas para enganchar los manejadores del acontecimiento del nivel inferior de la visión directamente. Los marcos son útiles principalmente cuando usted no tiene que escribirlos usted mismo.

Datos nativos vinculantes

Google ha lanzado su biblioteca de enlace de datos nativa!

https://developer.android.com/tools/data-binding/guide.html

Que le permite escribir sus puntos de vista como tal

 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.firstName}"/> 

Pero su mecanismo de cableado de eventos en este momento (versión rc1) no puede enlazar métodos en una clase que se extiende desde Observable (se genera una excepción al compilar, es un error conocido que se resolverá).

Y seguro que la falta de doble enlace (que no se espera que esté en la primera versión ) es un gran inconveniente.

De todos modos, aquí hay un buen proyecto de ejemplo para jugar con https://github.com/saleeh93/data-binding-samples

Bueno, mi proyecto de Android-Binding está tratando de hacer enlace de datos a través de diseño XML. Debido a que no hay un método de incorporación proporcionado por Google (y no puedo prever que Google lo haga), esa es la razón por la que inicié este proyecto.

Android M proporcionará una poderosa biblioteca para el enlace de datos!

Ya está disponible en la versión dev-preview .

Parece increíble dentro de los archivos xml y java :

 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.firstName}" /> 

Java Bean:

 public class User { private final String firstName; private final String lastName; public User(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return this.firstName; } public String getLastName() { return this.lastName; } } 

Unión:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity); User user = new User("Test", "User"); binding.setUser(user); } 

Al leer un poco sobre este tema, acabo de encontrar RoboBinding , un marco de presentación de datos vinculante para Android.

De forma similar al proyecto de vinculación de Android, puede vincular propiedades (unidireccionales o bidireccionales) y eventos a sus vistas en XML utilizando un espacio de nombres adicional.

Aunque no es un enfoque incorporado, puede ser una gran ayuda para usted.

Desde que usted hizo su pregunta por primera vez, el paisaje ha cambiado mucho.
Lo más importante Stuart Lodge nos dio MVVMCross .

Este proyecto proporciona un marco de desarrollo móvil multiplataforma para mvvm basado en Silverlight para WP7, Mono para Android y MonoTouch para iOS y el marco XAML de WinRT para aplicaciones de Windows 8 Store Este proyecto hace un uso extensivo de las Bibliotecas de Clases Portátiles para proporcionar cross Plataforma de aplicaciones nativas C #.

Proporciona vinculación de datos en tus Views contra ViewModels

Por ejemplo, permite lo siguiente:

 <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" local:MvxBind="{'Text':{'Path':'Query','Mode':'TwoWay'}}" /> 

Recursos:

Página Github: https://github.com/slodge/MvvmCross

Presentación: http://slodge.blogspot.co.uk/2012/12/mvvmcross-video-presentation-xaminar.html

Y un muy buen tutorial introductorio: Creación de aplicaciones Android con MVVM y vinculación de datos

Además de la respuesta de Oleksii, para aquellos que quieren ver un proyecto de ejemplo (parece que Google no ha proporcionado ningún proyecto de ejemplo todavía), acabo de hacer uno y lo empujó a GitHub.

Algunas notas:

  • classpath "com.android.databinding:dataBinder:1.0-rc0" no funciona para mí, así que uso classpath group: 'com.android.databinding', name: 'dataBinder', version: '1.0-rc0'
  • Necesita Java 7 +
  • Si obtienes errores, intenta limpiar / reconstruir.
  • No olvide implementar android.databinding.Observable o extends BaseObservable si necesita la capacidad de notificar cuando los datos cambian.
  • MinSdkVersion es 7. Es una lib de soporte.
  • Mi proyecto no sigue MVVM, sólo utiliza el enlace de datos. Se ha añadido una muestra MVVM.

Me doy cuenta de que esto es algunos años más tarde, pero frente a los mismos problemas que corrió a través de la siguiente que puede ayudar a disminuir la carga.

RoboBinding – maneja la encuadernación – como se mencionó anteriormente RoboGuice – hace la inyección de dependencia

Hay una muy buena presentación en video de RoboBinding que ayudará a explicar qué y cómo.

No estoy afiliado con ninguno de los esfuerzos, pero parecen prometedores para aquellas personas que siguen tratando de resolver los problemas vinculantes, especialmente en el código involucrado. RoboBinding también gestiona las actualizaciones bidireccionales.

  • Data Binding Android - El parámetro de tipo T tiene límites superiores incompatibles: ViewDataBinding y MainActivity
  • Android - DataBinding - ¿Cómo y cuándo se generarán las clases de enlace?
  • La vinculación de datos de Android produce "Carpetas de origen generadas en una ubicación incorrecta"
  • Android dataBinding - @BindingAdapter nombre de la aplicación personalizada que se ignora
  • Android: la etiqueta de vista no es correcta en la vista: null (CursorAdapter y DataBinding)
  • Obtener una clase vinculante desde vista
  • No se puede resolver la clase de enlace de datos de Android
  • Android: ¿Variable vinculante y pasando para incluir trabajo de diseño de etiquetas?
  • Uso de enlace de datos en error android: package *. *. Databinding no existe
  • No puede encontrar el símbolo BR en vinculación de datos de Android
  • Vinculación de datos de Android - Referencia para ver
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.