es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se hace un cast en una expresión de databinding?

Tengo una clase sellada que se envía a través de StateFlow. ¿Cómo puedo hacer un casteo para recuperar un valor encapsulado?
No puedo encontrar ningún ejemplo de sintaxis para expresiones de databinding.

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"></variable>

<textview android:id="@+id/name" android:text="@{ ??? }"></textview>

viewModel.Success.content.name

(UserInfo)viewModel.content.name

(viewModel as UserInfo).content.name

Ninguna de las opciones anteriores funciona.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para recuperar el valor contenido de una clase sellada enviada a través de StateFlow, puedes usar la siguiente sintaxis en las expresiones de databinding:

    @{viewModel como ResultOf.Success<userinfo>}.content.name
    

    Esta sintaxis realiza un cast de la clase sellada al tipo Success con un parámetro genérico de UserInfo, y luego recupera el campo name del objeto UserInfo contenido.

    Ten en cuenta que si la clase sellada no es del tipo Success o si el parámetro genérico no es UserInfo, esta sintaxis lanzará una ClassCastException. Por lo tanto, debes asegurarte de utilizar esta sintaxis solo cuando estés seguro del tipo de la clase sellada que se envía a través de StateFlow.

Comments are closed.