我想将应用程序设置添加到单独的屏幕,并以最方便、最简单的方式保存它们。这将是一个关键字下拉列表,只需单击按钮即可添加或删除。
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" ))
按下按钮后,屏幕上的列表不会更新。
似乎您从未真正将
allkeyWords
Set 发布到 _uiState
MutableStateFlow。请尝试按如下方式更新您的 oneywordsallChange
功能:
fun oneywordsallChange(newValue: String) {
allkeyWords.add(newValue)
_uiState.value = GameUiState(allkeyWords.toSet()) // publish updated Set
}