Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

255
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!