Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

263
Vistas
¿Restaurar SwipeToDismiss LazyColumn Item a su estado original?

Puedo hacer SwipeToDismiss pero quiero restaurar el elemento LazyColumn a su estado original. No quiero eliminar el elemento deslizado, pero quiero restaurarlo a su estado original.

Puedo lograr esto fácilmente en RecyclerView con solo llamar a notifyItemChanged() pero no sé cómo hacerlo en LazyColumn .

A continuación se muestra mi código:

 val dataList = remember{ mutableStateListOf<ListItem>()} for(i in 0..100){ dataList.add(ListItem("$i", "'$i' is the item number.")) } LazyColumn(Modifier.fillMaxSize()){ items(dataList, key = {it.id}){ item -> val dismissState = rememberDismissState( confirmStateChange = { if(it == DismissedToEnd || it == DismissedToStart){ Handler(Looper.getMainLooper()).postDelayed({ //dataList.remove(item) }, 1000) } true } ) SwipeToDismiss( state = dismissState, directions = setOf(StartToEnd, EndToStart), dismissThresholds = { direction -> FractionalThreshold(if (direction == StartToEnd || direction == EndToStart) 0.25f else 0.5f) }, background = { val direction = dismissState.dismissDirection ?: return@SwipeToDismiss val color by animateColorAsState( targetValue = when(dismissState.targetValue){ Default -> Color.LightGray DismissedToEnd -> Color.Green DismissedToStart -> Color.Red } ) val icon = when(direction){ StartToEnd -> Icons.Default.Done EndToStart -> Icons.Default.Delete } val scale by animateFloatAsState( if (dismissState.targetValue == Default) 0.8f else 1.2f ) val alignment = when (direction) { StartToEnd -> Alignment.CenterStart EndToStart -> Alignment.CenterEnd } Box(modifier = Modifier .fillMaxSize() .background(color) .padding(start = 12.dp, end = 12.dp), contentAlignment = alignment ){ Icon(icon, contentDescription = "Icon", modifier = Modifier.scale(scale)) } }, dismissContent = {ItemScreen(dismissState = dismissState, item = item)} ) } }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Puede esperar que currentValue se convierta en no Default y restablecer el estado:

De acuerdo con Thinking in Compose , la función componible debe estar libre de efectos secundarios; no debe restablecer directamente el estado en el ámbito componible. Para tales situaciones, debe usar una de las funciones especiales de efectos secundarios; puede encontrar más información en la documentación de efectos secundarios.

La recomposición puede ocurrir muchas veces, hasta una vez por cuadro durante la animación, y no usar funciones de efectos secundarios dará lugar a múltiples llamadas, lo que puede causar problemas de animación.

Como DismissState.reset() es una función de suspend , LaunchedEffect encaja perfectamente aquí: ya se está ejecutando en un ámbito de rutina.

 if (dismissState.currentValue != DismissValue.Default) { LaunchedEffect(Unit) { dismissState.reset() } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda