Android incluye diseño dinámico con la biblioteca de enlace de datos

Estoy utilizando el marco de MVVM para la aplicación de Android con la biblioteca de enlace de datos.

Tengo algunos compresores reutilizables, que deberían tener todas las actividades. Barra de herramientas, menú, botón de acción flotante.

Quiero crear una actividad genérica, que implementará todas estas características reutilizables y luego cada clase de actividad será heredada de esta actividad genérica. También tengo GenericViewModel clase y todos los demás ViewModel se hereda de esta clase genérica.

Pero tengo un problema con el diseño. Quiero crear un archivo de diseño genérico e incluir allí sublayout dinamically. Fe

<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <data> <variable name="data" type="com.mypackage.genericViewModel" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include bind:data="@{data}" layout="@layout/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" /> <include layout="@{Here i want to have dynamic variable}" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout></layout> 

No quiero copiar / pegar este código para cada actividad, pero la biblioteca de enlace de datos no permite incluir el diseño dinámicamente. ¿Hay alguna solución para estos casos?

Aquí está mi solución, espero que le ayude, no pienso que es una buena manera. ¡Si usted encuentra una mejor manera, por favor dígame. Gracias!

Aunque la biblioteca de enlace de datos no permite incluir el diseño dinámicamente, podemos usar ViewModel diferente para el diseño diferente. Utilicé un LinearLayout como un contenedor para alojar el diseño dinámico, y luego anular el método Activity setContentView para agregar vista a mi contenedor (LinearLayout).

GenericActivity

  protected GenericViewBinding mBinding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mBinding = DataBindingUtil.setContentView(this, R.layout.generic_view); } @Override public void setContentView(View view) { LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); mBinding.container.addView(view,lp); } 

Layout generic_view

  <data> <variable name="genericViewModel" type=".viewModel.GenericViewModel"/> </data> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white"> <!--a custom view,some generic layout --> <.view.base.BaseTitleView android:id="@+id/base_title" android:layout_width="match_parent" android:layout_height="wrap_content"/> <LinearLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/base_title" android:orientation="vertical"> </LinearLayout> </RelativeLayout> 

En actividad concreta lo usas así:

ConcreteActivity

 //different layout use different ViewModel here,generic logic&layout is in GenericActivity&generic_view layout. private ActivityConcreteBinding mActivityConcreteBinding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActivityConcreteBinding = DataBindingUtil.inflate(getLayoutInflater(), R.layout.activity_concrete,null,false); setContentView(mActivityConcreteBinding.getRoot()); ConcreteViewModel concreteViewModel = new ConcreteViewModel(mBinding);//mBinding from GenericActivity, deliver it into ConcreteViewModel to do some generic logic. ... } 

Para mí, no hay necesidad de copiar cola de diseño genérico para cada actividad más.

  • Show Dialog de ViewModel en Android MVVM Architecture
  • Patrón de diseño de Android MVVM
  • Enlace de datos de Android layout_width y layout_height
  • Implementación adecuada de MVVM en Android
  • Qué debe hacerse en Activity / Fragment y ViewModel en MVVM
  • Desventaja de MVP sobre patrón de diseño MVVM en android
  • Android ViewModel no tiene constructor de argumento cero
  • ¿Debería usar los componentes de arquitectura de Google?
  • ¿Cómo puedo utilizar sharedPreferences fuera de una actividad?
  • Realización de Interactors con Android MVP Clean Architecture
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.