Zawężę nieco pytanie, które zadałem poprzednio :-)
W ViewModel mam funkcję, która odpowiednio wyświetla wyniki obliczeń
To fragment tego kodu:
var wynik_tablica_1 = 0
val zawodnicy: MutableList<RecordZawodnik> = mutableListOf()
for (numer in 1..rozmiar_tablicy){
wynik_tablica_1 = tablica_1[numer-1].toInt()
zawodnicy.add(RecordZawodnik("Z" + numer,wynik_tablica_1))
}
var lp= 0
println("--- ASC ---")
zawodnicy.sortByDescending { it.wynik_zawodnika } //sortowanie
zawodnicy.forEach{
lp += 1
print("lp$lp. " + it.nazwa_zawodnika + " ")
println(it.wynik_zawodnika)
val a = it.wynik_zawodnika
val b = it.nazwa_zawodnika
print("a= $a")
println("b= $b")
_recordZawodnik.value = recordZawodnik.value.copy( b,a )
println ("_record_Zawodnik.value= " + _recordZawodnik.value)
println ("record_Zawodnik.value.copy_ba = " + recordZawodnik.value.copy(b,a))
}
Funkcja działa prawidłowo ale nie potrafię przekazać wyników do wyświetlenia na ekran telefonu.
To fragment wyników Println na Terminalu:
I/System.out: lp1. Z12 86
I/System.out: a= 86b= Z12
I/System.out: _record_Zawodnik.value= RecordZawodnik(nazwa_zawodnika=Z12, wynik_zawodnika=86, a=0, b=test2)
I/System.out: record_Zawodnik.value.copy_ba = RecordZawodnik(nazwa_zawodnika=Z12, wynik_zawodnika=86, a=0, b=test2)
Mam kłopot z linią:
_recordZawodnik.value = recordZawodnik.value.copy( b,a )
Nie potrafię tego prawidłowo zapisać.
( b , a ) się nie zmieniają .
Wyświetla się to co zadeklarowałem w ViewState:
data class RecordZawodnik (
var nazwa_zawodnika: String ="",
var wynik_zawodnika: Int =0,
val a: Int = 0,
val b: String = "test2"
)
Tu funkcja która ma wyświetlić wyniki:
@Composable
fun wyniki(
viewModel: HomeViewModel = hiltViewModel()
){
val state = viewModel.recordZawodnik.collectAsState()
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = stringResource(R.string.calculation_result, state.value.a)
)
Text(
text = stringResource(R.string.calculation_result, state.value.b)
)
}
}
Niestety a i b wyświetlają te same wartości jak w ViewModel...
:-)
Edit
Zmieniłem nieco zapis w ViewModel i coś się zaczęło dziać: :-)
_recordZawodnik.value = recordZawodnik.value.copy( b= it.nazwa_zawodnika,a =it.wynik_zawodnika )
Tak wygląda to na terminalu:
I/System.out: lp1. Z12 86
I/System.out: a= 86b= Z12
I/System.out: _record_Zawodnik.value= RecordZawodnik(nazwa_zawodnika=, wynik_zawodnika=0, a=86, b=Z12)
I/System.out: record_Zawodnik.value.copy_ba = RecordZawodnik(nazwa_zawodnika=Z12, wynik_zawodnika=86, a=86, b=Z12)
a i b zaczęły pracować, tylko nie wiem czemu wcześniej to nie działało.
Teraz tylko to przekazać na ekran :-)
Coś tam niby jest szczątkowo: :-)
Wyświetla się ostatni wynik...to akurat jest logiczne :-)