Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

265
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda