用底部navbar在屏幕之间保存状态-Jetpac组成
如标题所建议的 - 我想保存屏幕元素的状态。也就是说,我想在屏幕A上切换一些东西,转到屏幕B,返回屏幕A,并在屏幕A中保存所有更改。我是Android开发的新手。据我了解,这种情况的解决方案之一是使用ViewModel。查看下面的代码。我试图用VM重写这件作品。
@Composable
fun DaysOfWeek(
days: Int = 6,
//viewModel: MyViewModel = MyViewModel()
){
val states = remember{
SnapshotStateList<Boolean>().also {
for(day in 0..days){
it.add(false)
}
}
}
val person = mutableListOf(0, 0, 0, 0, 0, 0, 0)
val person1 = remember{ mutableStateOf(person) }
/*val st = remember {
viewModel.snap
}*/
Column() {
Row(horizontalArrangement = Arrangement.SpaceEvenly){
for(day in 0..days){
DaysOfWeekContainer(
color = if (states[day]) Color.Green else Color.Transparent
){
DaysOfWeekButton(
onClick =
{
//viewModel.snapChanged(day)
states[day] = !states[day]
if(states[day]) person1.value.set(day, 1)
else person1.value.set(day, 0)
},
day = day
)
}
}
}
Spacer(modifier = Modifier.height(20.dp))
Text("${person1.value}")
}
}
VM:
class MyViewModel {
//state
var clicked by mutableStateOf(false)
var color1 by mutableStateOf(Color.Transparent)
var color2 by mutableStateOf(Color.Green)
var rememem by mutableStateOf(
SnapshotStateList<Boolean>().also {
for(day in 0..6){
it.add(false)
}
}
)
//events
fun clickedChange(){clicked = !clicked}
fun snapChanged(int: Int){
rememem[int] = !rememem[int]
}
}
我尝试了这一点,这就是工作!但是,当我在屏幕上的屏幕之间切换时,不会保存状态,
@Composable
fun DaysOfWeek(
days: Int = 6,
viewModel: MyViewModel = MyViewModel()
){
val person = mutableListOf(0, 0, 0, 0, 0, 0, 0)
val person1 = remember{ mutableStateOf(person) }
Column() {
Row(horizontalArrangement = Arrangement.SpaceEvenly){
for(day in 0..days){
DaysOfWeekContainer(
color = if(viewModel.rememem[day]) viewModel.color2 else viewModel.color1
){
DaysOfWeekButton(
onClick =
{
viewModel.snapChanged(day)
if(viewModel.rememem[day]) person1.value.set(day, 1)
else person1.value.set(day, 0)
},
day = day
)
}
}
}
Spacer(modifier = Modifier.height(20.dp))
Text("${person1.value}")
}
}
我有7个按钮,每次我单击其中一个按钮时,它们会更改颜色。 我该如何解决问题使用VM。屏幕上的状态更改,但切换屏幕时没有保存。
谢谢你!
As the title suggests - I want to save the states of screen elements. That is, I want to switch something on screen A, go to screen B, return to screen A and have all the changes in screen A saved. I am new to android development. As I understand it, one of the solutions to this situation is to use viewmodel. Check out the code below. I am trying to rewrite this piece with VM.
@Composable
fun DaysOfWeek(
days: Int = 6,
//viewModel: MyViewModel = MyViewModel()
){
val states = remember{
SnapshotStateList<Boolean>().also {
for(day in 0..days){
it.add(false)
}
}
}
val person = mutableListOf(0, 0, 0, 0, 0, 0, 0)
val person1 = remember{ mutableStateOf(person) }
/*val st = remember {
viewModel.snap
}*/
Column() {
Row(horizontalArrangement = Arrangement.SpaceEvenly){
for(day in 0..days){
DaysOfWeekContainer(
color = if (states[day]) Color.Green else Color.Transparent
){
DaysOfWeekButton(
onClick =
{
//viewModel.snapChanged(day)
states[day] = !states[day]
if(states[day]) person1.value.set(day, 1)
else person1.value.set(day, 0)
},
day = day
)
}
}
}
Spacer(modifier = Modifier.height(20.dp))
Text("${person1.value}")
}
}
VM:
class MyViewModel {
//state
var clicked by mutableStateOf(false)
var color1 by mutableStateOf(Color.Transparent)
var color2 by mutableStateOf(Color.Green)
var rememem by mutableStateOf(
SnapshotStateList<Boolean>().also {
for(day in 0..6){
it.add(false)
}
}
)
//events
fun clickedChange(){clicked = !clicked}
fun snapChanged(int: Int){
rememem[int] = !rememem[int]
}
}
i try this and this is work! but does not save the state when I switch between screens
@Composable
fun DaysOfWeek(
days: Int = 6,
viewModel: MyViewModel = MyViewModel()
){
val person = mutableListOf(0, 0, 0, 0, 0, 0, 0)
val person1 = remember{ mutableStateOf(person) }
Column() {
Row(horizontalArrangement = Arrangement.SpaceEvenly){
for(day in 0..days){
DaysOfWeekContainer(
color = if(viewModel.rememem[day]) viewModel.color2 else viewModel.color1
){
DaysOfWeekButton(
onClick =
{
viewModel.snapChanged(day)
if(viewModel.rememem[day]) person1.value.set(day, 1)
else person1.value.set(day, 0)
},
day = day
)
}
}
}
Spacer(modifier = Modifier.height(20.dp))
Text("${person1.value}")
}
}
on screen i have 7 buttons and every time i click on one of them they change color.
how can i solve the problem use VM. States on screen changes, but not saved when switching the screen.
Thank you!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论