PROBLEM ::: I want to create a lazy column where I can select or deselect only one option at a time. Right now, whenever I click on row component inside lazy column, all the rows get selected.
CODE :::
@Composable fun LazyColumnWithSelection() { var isSelected by remember { mutableStateOf(false) } var selectedIndex by remember { mutableStateOf(0) } val onItemClick = { index: Int -> selectedIndex = index } LazyColumn( modifier = Modifier.fillMaxSize(), ) { items(100) { index -> Row(modifier = Modifier .fillMaxWidth() .clickable { onItemClick.invoke(index) if (selectedIndex == index) { isSelected = !isSelected } } .padding(16.dp), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically) { Text(text = "Item $index", modifier = Modifier.padding(12.dp), color = Color.White) if (isSelected) { Icon(imageVector = Icons.Default.Check, contentDescription = "Selected", tint = Color.Green, modifier = Modifier.size(20.dp)) } } } } } CURRENT RESULT :::
Before Clicking ->
After Clicking ->
You can see all the items are getting selected but I should be able to select or deselect one item at a time not all.
I tried to use remember state for selection but I think I'm doing wrong something in the index selection or maybe if statement.



if (selectedIndex == index)instead ofif (isSelected). Do you need "isSelected" at all?if (selectedIndex == index), it going to set index 0 as default option and also there will be no option to de-select the selected row component . That's why I have to useif(isSelected). But you are also right i have to useif (selectedIndex == index)outside the clickable to get the updated selectedIndex value.