gpt4 book ai didi

android - Livedata 结合 Jetpack Compose

转载 作者:行者123 更新时间:2023-12-05 00:04:53 27 4
gpt4 key购买 nike

我正在尝试学习 Jetpack Compose 并尝试制作一个简单的应用程序,您可以在其中使用房间在概览列表中添加餐厅和分数。

但是,每次我尝试在文本字段中键入一个词时,文本字段都不会更新并保持为空。我希望在 onValueChange 函数中更新 locationName 会触发状态更新,因为它是 LiveData 类的一部分。我怎样才能解决这个问题,而不必在我的 modelView 中创建一个单独的 UI 模型并将其转换为我的实体对象以防数据需要保留?

我的撰写功能


@Composable
fun AddItemScreenBody(modifier: Modifier = Modifier.Companion) {
VerticalScroller {
Column(modifier) {

var locations = addItemViewNodel.location.observeAsState()
FilledTextField(
value = locations.value!!.locationName,
onValueChange = { data -> locations.value!!.locationName = data },
label = { Text(stringResource(R.string.name), style = TextStyle(color = Color(0xFFC7C7C7))) })

}

}
}

我的 View 模型

class AddItemViewModel () : ViewModel() {
var location : LiveData<LocationEntity> = MutableLiveData(LocationEntity())

}

我的数据模型

    @Entity(tableName = "locations")
class LocationEntity @Ignore constructor () {
@PrimaryKey(autoGenerate = true)
var id: Long = 0
@ColumnInfo(name = "location_name")
var locationName: String = ""

constructor (id: Long, locationName: String, category: Category) : this()
{
this.id = id
this.locationName = locationName
}

}

最佳答案

使用最新的 compose 版本 (1.0.0-alpha09),对于 TextField 部分,您可以执行以下操作:

@Composable
fun MyTextField() {
Column(Modifier.padding(16.dp)) {
val textFieldState = remember { mutableStateOf(TextFieldValue()) }
TextField(
value = textState.value,
onValueChange = { textFieldState.value = it },
onImeActionPerformed = { imeAction,controller ->
if (imeAction == ImeAction.Done){
locations.value.locationName = textFieldState.value.text
controller?.hideSoftwareKeyboard()
}
}
)
Text("text field value is: ${textFieldState.value.text}")
}

在这里,不是在用户键入时保存数据,而是在用户执行操作时保存数据。

关于android - Livedata 结合 Jetpack Compose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61619408/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com