Tengo una clase sellada que se envía a través de StateFlow. ¿Cómo lanzarlo para recuperar un valor cerrado? No puedo encontrar ningún ejemplo de sintaxis para expresiones de enlace de datos.
dataclass UserInfo(val name: String) sealed class ResultOf<out T> { data class Success<out R>(val content: R): ResultOf<R>() data class Failure(val throwable: Throwable): ResultOf<Nothing>() } val model = ResultOf.Success.content(UserInfo("John Doe")) <variable name = "viewModel" type="com.example.hello.user.ResultOf"/> <TextView android:id="@+id/name" android:text="@{ ??? }" />viewModel.Success.content.name (UserInfo)viewModel.content.name (viewModel as UserInfo).content.name
Ninguno de los anteriores funciona tampoco
No estoy seguro de si hay una manera de hacerlo mediante la conversión de una declaración condicional en XML en este momento.
Puede hacerlo creando un BindingAdapter . Al igual que:
data class User(val name: String) sealed class ResultOf<out T: Any> { data class Success<out R: Any>(val content: R): ResultOf<R>() data class Failure(val throwable: Throwable): ResultOf<Nothing>() } El BindingAdapter :
@BindingAdapter("app:userName") fun TextView.setUserName(result: ResultOf<User>) { text = when(result) { is ResultOf.Success -> result.content.name is ResultOf.Failure -> "" } }Archivo de diseño:
<data> <import type="com.example.hello.user.ResultOf" /> <import type="com.example.hello.user.User" /> <variable name="userResult" type="ResultOf<User>" /> </data> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" app:userName="@{userResult}"/>