Android Compose: принудительно свернуть все развернутые карточки, кроме выбранных в данный момент
В настоящее время я работаю над списком расширяемых карт. Я хотел бы закрыть все другие открытые расширяемые карты, кроме выбранной в данный момент.
Данные, с которыми я работаю, представляют собой Map<String, String>, однако я не знаю, как получить ссылку на список элементов в списке, чтобы перебрать его и закрыть все остальные, ожидая текущего. Любые предложения будут очень полезны!
val size = viewModel.getQuestionsAndAnswers(groupName).size
Column {
var i = 0
for(question in viewModel.getQuestionsAndAnswers(groupName)) {
ExpandableCard(
title = question.key,
description = question.value,
position = i++,
onExpandableCardClicked = {
// question: how do I loop over all the items in expandable cards and close them.
}
)
}
}
1 ответ
У вас может быть состояние, которое информирует об индексе текущей открытой карты:
val selectedIndexState = rememberSaveable {
mutableStateOf(-1)
}
А затем добавьте
isExpanded
аргумент в пользу
ExpandableCard
:
ExpandableCard(
title = question.key,
description = question.value,
position = i++,
isExpanded = selectedIndexState.value == i,
onExpandableCardClicked = {
selectedIndexState.value = i
}
)
Вы также можете рассмотреть возможность использования
LazyColumn
при работе с такими списками:
val selectedIndexState = rememberSaveable {
mutableStateOf(-1)
}
LazyColumn {
itemsIndexed(
items = viewModel.getQuestionsAndAnswers(groupName).toList()
) { index, question ->
ExpandableCard(
title = question.first,
description = question.second,
position = index,
isSelected = selectedIndexState.value == index,
onExpandableCardClicked = {
selectedIndexState.value = index
}
)
}
}