【发布时间】:2020-05-05 17:36:13
【问题描述】:
我正在尝试学习 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))) })
}
}
}
我的视图模型
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
}
}
【问题讨论】:
-
嘿.. 你试过@Model 吗?
-
locations.value!!.locationName = data更新value无济于事,您应该致电addItemViewNodel.location.setValue(new Instance of LocationEntity with desired locationName)
标签: android kotlin android-jetpack android-jetpack-compose