У меня есть список элементов ниже, рядом с каждым элементом которого есть флажок в виде кнопки. Если кнопка не выбрана, должен отображаться черный пустой кружок. Когда кнопка нажата, внутри черного круга должна быть галочка.
При запуске кода и просмотре журналов отладки модель представления обновляется, однако мое представление — нет. Чего не хватает?
data class ListItem(
var title: String,
var checked: Boolean
)
class ItemsViewModel: ViewModel() {
private var _reportDetails: MutableStateFlow = MutableStateFlow(mutableListOf())
val reportDetails = _reportDetails.asStateFlow()
private var _issues: MutableStateFlow =
MutableStateFlow(mutableListOf(
ListItem(title = "Item 1", checked = false),
ListItem(title = "Item 2", checked = false),
ListItem(title = "Item 3", checked = false),
ListItem(title = "Item 4", checked = false),
ListItem(title = "Item 5", checked = false),
ListItem(title = "Item 6", checked = false),
ListItem(title = "Item 7", checked = false),
ListItem(title = "Item 8", checked = false),
ListItem(title = "Item 9", checked = false)
))
val issues = _issues.asStateFlow()
fun addToReportDetails(reportDetail: String) {
_reportDetails.update {
it.add(reportDetail)
return
}
}
fun removeFromReportDetails(reportDetail: String) {
_reportDetails.update {
it.remove(reportDetail)
return
}
}
fun updateOnlineIssuesAtIndex(index: Int, checked: Boolean) {
_issues.update {
it[index].checked = checked
return
}
}
}
@Composable
fun ReportView(
itemsViewModel: ItemsViewModel,
) {
val reportDetails by itemsViewModel.reportDetails.collectAsStateWithLifecycle()
val issues by itemsViewModel.issues.collectAsStateWithLifecycle()
LazyColumn(
modifier = Modifier
.padding(50.dp)
) {
item {
for ((index, issue) in issues.withIndex()) {
Column(
verticalArrangement = Arrangement.spacedBy(5.dp),
) {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(10.dp)
) {
Text(text = issue.title)
Button(
onClick = {
if (!issue.checked) {
itemsViewModel.updateOnlineIssuesAtIndex(index = index, checked = true)
itemsViewModel.addToReportDetails(issue.title)
Log.d("ReportUser", "reportDetails = $reportDetails")
Log.d("ReportUser", "issue.checked = ${issue.checked}")
} else {
itemsViewModel.updateOnlineIssuesAtIndex(index = index, checked = false)
itemsViewModel.removeFromReportDetails(issue.title)
Log.d("ReportUser", "reportDetails = $reportDetails")
Log.d("ReportUser", "issue.checked = ${issue.checked}")
}
}
) {
Box(
modifier = Modifier
.size(25.dp)
.border(
width = 1.dp,
color = Color.Black,
shape = CircleShape
)
) {
if (issue.checked) {
Icon(
imageVector = Icons.Rounded.CheckCircle,
contentDescription = "null",
modifier = Modifier.size(25.dp),
tint = Color.Black,
)
}
}
}
}
}
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... -viewmodel
Просмотр не обновляется после обновления до viewModel ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1727510741
Anonymous
У меня есть список элементов ниже, рядом с каждым элементом которого есть флажок в виде кнопки. Если кнопка не выбрана, должен отображаться черный пустой кружок. Когда кнопка нажата, внутри черного круга должна быть галочка.
При запуске кода и просмотре журналов отладки модель представления обновляется, однако мое представление — нет. Чего не хватает?
data class ListItem(
var title: String,
var checked: Boolean
)
class ItemsViewModel: ViewModel() {
private var _reportDetails: MutableStateFlow = MutableStateFlow(mutableListOf())
val reportDetails = _reportDetails.asStateFlow()
private var _issues: MutableStateFlow =
MutableStateFlow(mutableListOf(
ListItem(title = "Item 1", checked = false),
ListItem(title = "Item 2", checked = false),
ListItem(title = "Item 3", checked = false),
ListItem(title = "Item 4", checked = false),
ListItem(title = "Item 5", checked = false),
ListItem(title = "Item 6", checked = false),
ListItem(title = "Item 7", checked = false),
ListItem(title = "Item 8", checked = false),
ListItem(title = "Item 9", checked = false)
))
val issues = _issues.asStateFlow()
fun addToReportDetails(reportDetail: String) {
_reportDetails.update {
it.add(reportDetail)
return
}
}
fun removeFromReportDetails(reportDetail: String) {
_reportDetails.update {
it.remove(reportDetail)
return
}
}
fun updateOnlineIssuesAtIndex(index: Int, checked: Boolean) {
_issues.update {
it[index].checked = checked
return
}
}
}
@Composable
fun ReportView(
itemsViewModel: ItemsViewModel,
) {
val reportDetails by itemsViewModel.reportDetails.collectAsStateWithLifecycle()
val issues by itemsViewModel.issues.collectAsStateWithLifecycle()
LazyColumn(
modifier = Modifier
.padding(50.dp)
) {
item {
for ((index, issue) in issues.withIndex()) {
Column(
verticalArrangement = Arrangement.spacedBy(5.dp),
) {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(10.dp)
) {
Text(text = issue.title)
Button(
onClick = {
if (!issue.checked) {
itemsViewModel.updateOnlineIssuesAtIndex(index = index, checked = true)
itemsViewModel.addToReportDetails(issue.title)
Log.d("ReportUser", "reportDetails = $reportDetails")
Log.d("ReportUser", "issue.checked = ${issue.checked}")
} else {
itemsViewModel.updateOnlineIssuesAtIndex(index = index, checked = false)
itemsViewModel.removeFromReportDetails(issue.title)
Log.d("ReportUser", "reportDetails = $reportDetails")
Log.d("ReportUser", "issue.checked = ${issue.checked}")
}
}
) {
Box(
modifier = Modifier
.size(25.dp)
.border(
width = 1.dp,
color = Color.Black,
shape = CircleShape
)
) {
if (issue.checked) {
Icon(
imageVector = Icons.Rounded.CheckCircle,
contentDescription = "null",
modifier = Modifier.size(25.dp),
tint = Color.Black,
)
}
}
}
}
}
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79033439/view-not-updating-after-update-to-viewmodel[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия