Utilizando CalendarView con enlace de datos

Quiero usar el enlace de datos bidireccional con AndroidLiveData componentes como alternativa para los campos observables. Aquí hay un código para un proyecto simple conCalendarView yEditText que muestra información sobre el botón al que se hace clic.

<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
    <variable
        name="testDate"
        type="android.arch.lifecycle.MutableLiveData&lt;Long&gt;" />
    <variable
        name="testString"
        type="android.arch.lifecycle.MutableLiveData&lt;String&gt;" />
</data>

<LinearLayout 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onButtonClick"
        android:text="Show data"/>

    <CalendarView
        android:id="@+id/cal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:date="@={testDate}"/>

    <EditText
        android:id="@+id/str"
        android:text="@={testString}"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
</layout>

Y código de actividad:

class MainActivity : AppCompatActivity() {

val liveDate = MutableLiveData<Long>().apply { value = System.currentTimeMillis() }
val liveString = MutableLiveData<String>().apply { value = "Date: " }

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
            .also {
                it.testDate = liveDate
                it.testString = liveString

                it.cal.setOnDateChangeListener { view, year, month, dayOfMonth ->
                    Toast.makeText(applicationContext, "${view.date}", Toast.LENGTH_SHORT).show()
                }

            }
}

@TargetApi(Build.VERSION_CODES.O)
fun onButtonClick(view: View) {
    Toast.makeText(this, liveString.value +
            Instant.ofEpochMilli(liveDate.value!!).atZone(ZoneId.systemDefault()).toLocalDate()
            , Toast.LENGTH_SHORT)
            .show()
}
}

El enlace bidireccional funciona bien para String, pero no para la fecha. Encontréesta publicació, que dice que la fecha seleccionada es en realidad algo diferente de la fecha utilizada porandroid:date ... Muy bien, puede capturar esta acción de cambiar la fecha en el oyente. El problema es que el oyentesetOnDateChangeListener (aplicado enalso {} arriba) no se activa en absoluto, cuando hay una configuración de enlace bidireccional.

Corrígeme si me equivoco, pero si quiero obtener la fecha seleccionadaTengo qu utilizarOnDateChangeListener. También parece ser incompatible conandroid:date@={...} porque usar el enlace bidireccional parece anular a nuestro oyente. Tendría sentido siandroid:date@={...} proporcionó la misma funcionalidad queOnDateChangeListener, pero no lo hace.

Así que la pregunta final es: ¿es posible obtener la fecha seleccionada de alguna manera con enlace de datos bidireccional?

Respuestas a la pregunta(1)

Su respuesta a la pregunta