Enlace de datos de Android a CustomView, no es capaz de establecer el model de vista de la actividad al componente

Creé una vista personalizada para volver a usarla. Estoy siguiendo la architecture de MVVM y me requiere pasar ViewModel a la Vista que he creado.

Tengo una CustomView como esta (Todo está en kotlin)

class KeyValueMutlipleEntryField @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : FrameLayout(context, attrs, defStyleAttr) { lateinit var keyValMutlipleEntryField: KeyValueMutlipleEntryFieldBinding fun setKeyValueViewModel(keyValueViewModel: KeyValueMutlipleEntryFieldViewModel?) { keyValueViewModel?.let { keyValMutlipleEntryField.keyValueViewModel = keyValueViewModel } } fun setKeyValFieldAdapter(keyValFieldadapter: KeyValueFieldAdapter?) { keyValFieldadapter?.let { keyValMutlipleEntryField.keyValFieldAdapter = keyValFieldadapter } } init { initView() } override fun onFinishInflate() { super.onFinishInflate() keyValMutlipleEntryField?.executePendingBindings() } private fun initView() { keyValMutlipleEntryField = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.key_value_mutliple_entry_field, null, false) addView(keyValMutlipleEntryField.root) } } 

El file de layout para el mismo se ve a continuación

 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <data> <variable name="keyValueViewModel" type="com.app.viewmodel.widget.KeyValueMutlipleEntryFieldViewModel"></variable> <variable name="keyValFieldAdapter" type="com.app.view.widgets.KeyValueFieldAdapter"></variable> </data> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/field_container" android:layout_width="match_parent" android:layout_height="wrap_content" app:adapter="@{keyValFieldAdapter}" app:items="@{keyValueViewModel.getKeyValueFields}"> </android.support.v7.widget.RecyclerView> <android.support.v7.widget.AppCompatImageView android:id="@+id/action_add" android:layout_width="@dimen/baseline_grid_1.5x" android:layout_height="@dimen/baseline_grid_1.5x" android:layout_marginLeft="@dimen/baseline_grid_2.5x" android:layout_marginTop="@dimen/baseline_grid_4x" android:onClick="@{()->keyValueViewModel.addNewField()}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/field_container" app:srcCompat="@drawable/ic_add" tools:layout_editor_absoluteY="219dp" /> <android.support.v7.widget.AppCompatTextView android:id="@+id/add_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/baseline_grid_3.5x" android:onClick="@{()->keyValueViewModel.addNewField()}" android:text="@{keyValueViewModel.getAddItemLabel}" android:textColor="@color/colorTurquoiseBlue" android:textSize="@dimen/app_text_size_small" app:layout_constraintBottom_toBottomOf="@+id/action_add" app:layout_constraintStart_toEndOf="@+id/action_add" app:layout_constraintTop_toTopOf="@+id/action_add" /> </android.support.constraint.ConstraintLayout> </layout> 

Puse esta vista personalizada en un fragment y lo configuré en el layout como este

 <com.app.view.widgets.KeyValueMutlipleEntryField android:id="@+id/email_layout" android:layout_width="match_parent" android:layout_height="wrap_content" app:keyValFieldAdapter="@{emailAdapter}" app:keyValueViewModel="@{createProfileViewModel.emailFieldViewModel}" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/divider_three"> </com.app.view.widgets.CSKeyValueMutlipleEntryField> 

Las properties se definen en el bloque de datos de Fragment xml

 <variable name="createProfileViewModel" type="com.app.viewmodel.onboarding.importcontact.CreateProfileViewModel"></variable> <variable name="emailAdapter" type="com.app.view.widgets.KeyValueFieldAdapter"></variable> 

en fragment tengo el siguiente código para asignar viewmodel para ver

 fragmentCreateProfilebinding = DataBindingUtil.inflate(inflater, R.layout.fragment_create_profile, container, false) fragmentCreateProfilebinding.emailAdapter = KeyValueFieldAdapter(R.layout.cs_key_value_mutliple_entry_field) fragmentCreateProfilebinding.createProfileViewModel = CreateProfileViewModel(context) 

Cuando se ejecuta el código obtengo una exception de Kotlin como esta

  Parameter specified as non-null is null: 

Esto se entiende si obtenemos un valor que admite valores NULL en Kotlin. Esto está sucediendo con BindingAdapter lo que tengo para la vista de reciclador

 @BindingAdapter("app:adapter") fun setAdapterToList(view: RecyclerView?, adapter: BaseAppAdapter?) { view?.addItemDecoration(DividerItemDecoration(view?.context, DividerItemDecoration.HORIZONTAL)) view?.layoutManager = LinearLayoutManager(view?.context) view?.adapter = adapter } 

Los he convertido en campo anulable, incluso el error que obtengo. No puedo entender cómo funciona el flujo de data binding. Alguien por favor consejo como cómo puedo resolver esto o hacerlo más confiable.

Gracias

Solutions Collecting From Web of "Enlace de datos de Android a CustomView, no es capaz de establecer el model de vista de la actividad al componente"