Переменная MutableLivedata продолжает сбросить по умолчанию после 2 -й попыткиAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Переменная MutableLivedata продолжает сбросить по умолчанию после 2 -й попытки

Сообщение Anonymous »

Я пытаюсь сделать простое приложение «Прирастание/уменьшение», используя MutableLivedata в качестве практики.
По какой -то причине значение моего TextCount продолжает сбросить обратно до 0 после увеличения/уменьшения. Он идет от 0 до 1, затем сбросится до 0. Я действительно не уверен, почему. Я не эксперт в Котлине, поэтому я, вероятно, пропустил что -то основное. Я сделал аналогичное приложение, используя строку MutableLivadata, и значение, кажется, сохраняется. Надеюсь, вы сможете помочь мне с этим < /p>
// From MainView.kt
class MainView: ViewModel() {

var textCount: MutableLiveData = MutableLiveData(0)

fun incrementClick(){
textCount.value = textCount.value.inc()
}

fun decrementClick(){
textCount.value = textCount.value.dec()
}
}

//From MainActivity.kt
@Composable
fun Main(
myViewModel: MainView = MainView(),
modifier: Modifier
) {
var clickCtr = myViewModel.textCount.observeAsState(0)

Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
modifier = modifier
.fillMaxSize()
) {
Clicker(
clickCtr.value,
{
myViewModel.incrementClick()
},
{
myViewModel.decrementClick()
}
)
}

}

@Composable
fun Main(
myViewModel: MainView = MainView(),
modifier: Modifier
) {
var clickCtr = myViewModel.textCount.observeAsState(0)

Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
modifier = modifier
.fillMaxSize()
) {
Clicker(
clickCtr.value,
{
myViewModel.incrementClick()
Log.d("MainClick", clickCtr.value.toString())
},
{
myViewModel.decrementClick()
Log.d("MainClick", clickCtr.value.toString())
}
)
}

}

// Rom MainActivity.kt
@Composable
fun Clicker(
clickValue:Int,
actionInc: () -> Unit,
actionDec: () -> Unit
) {

Text(
text = clickValue.toString(),
fontWeight = FontWeight.ExtraBold,
fontSize = 50.sp,
textAlign = TextAlign.Center
)
Spacer(
modifier = Modifier.height(20.dp)
)
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Center
) {
Button(
onClick = actionInc
) {
Text(text = "Click to increment")
}
Button(
onClick = actionDec
) {
Text(text = "Click to decrement")
}
}
}

Here's a sample of my log.d
It displays the value after incrementing. As you can see, It increment to 1 the first time, and on the second attempt, it increments to 2, but the display never displays 2 and keeps on reverting to 0 (I hope that makes sense). I tried changing the mutablelivedata value and it keeps on defaulting to that after 1st attempt

---------------------------- PROCESS STARTED (9617) for package com.example.counttheclick ----------------------------
2025-09-29 12:57:54.365 9617-9617 MainClick com.example.counttheclick D 1
2025-09-29 12:57:54.816 9617-9617 MainClick com.example.counttheclick D 2
2025-09-29 12:57:55.283 9617-9617 MainClick com.example.counttheclick D 1
2025-09-29 12:57:55.699 9617-9617 MainClick com.example.counttheclick D 1
2025-09-29 12:57:56.017 9617-9617 MainClick com.example.counttheclick D 1
2025-09-29 12:57:56.483 9617-9617 MainClick com.example.counttheclick D 1
2025-09-29 12:57:56.649 9617-9617 MainClick com.example.counttheclick D 1
2025-09-29 12:57:56.816 9617-9617 MainClick com.example.counttheclick D 1
2025-09-29 12:57:56.983 9617-9617 MainClick com.example.counttheclick D 1


Подробнее здесь: https://stackoverflow.com/questions/797 ... er-2nd-try
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»