使用视图模型和数据类为应用程序创建设置

问题描述 投票:0回答:1

我想将应用程序设置添加到单独的屏幕,并以最方便、最简单的方式保存它们。这将是一个关键字下拉列表,只需单击按钮即可添加或删除。

class SettingsActivity : ComponentActivity()
    @OptIn(ExperimentalMaterial3Api::class)
       override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContent {
        val gameViewModel: GameViewModel = viewModel()`
        val gameUiState by gameViewModel.uiState.collectAsState()

        val langs = gameUiState.allkeyWords

      Column{
            for(lang in langs){
                Row(modifier = Modifier.padding(10.dp).fillMaxWidth()){
                    Box(modifier=Modifier.size(25.dp))
                    Text(text = lang, fontSize = 18.sp, modifier = Modifier.padding(10.dp))
                }
            }
            Row(){
            Button(
                onClick = {
                    gameViewModel.oneywordsallChange("test word")
                }
            ) {
                Text("add word",  color = Color.Green)
            }
            }

我的 viemodel 课程

class GameViewModel : ViewModel() {
private val _uiState = MutableStateFlow(GameUiState())
val uiState: StateFlow<GameUiState> = _uiState.asStateFlow()

var allkeyWords : MutableSet<String> = mutableSetOf()


fun oneywordsallChange(newValue: String) {
    allkeyWords.add(newValue)
}

fun  getoneywordsallChange(): (MutableSet<String>) {
    return allkeyWords
}

我的数据类

data class GameUiState(
var allkeyWords: Set = setOf( "animal", "auto", "anecdote", "alphabet" ))

按下按钮后,屏幕上的列表不会更新。

android android-jetpack-compose
1个回答
0
投票

似乎您从未真正将

allkeyWords
Set 发布到
_uiState
MutableStateFlow。请尝试按如下方式更新您的
oneywordsallChange
功能:

fun oneywordsallChange(newValue: String) {
    allkeyWords.add(newValue)
    _uiState.value = GameUiState(allkeyWords.toSet())  // publish updated Set
}
© www.soinside.com 2019 - 2024. All rights reserved.