android - 为什么我与 EditText 的数据绑定不起作用?
问题描述
我有这个用于 Room 的课程:
data class Piece(
@ColumnInfo(name = "title")
var title: String
)
然后我有一个表单类,它只保存我想要显示的字符串值EditText
。
class CreateEditPieceForm {
var title: String = ""
}
我的 ViewModel 包含这些类的实例:
class EditPieceViewModel(...) : AndroidViewModel(application) {
val piece : LiveData<Piece?> = database.getMyPiece() // valid Piece with title set
val form = CreateEditPieceForm()
}
在我的片段中,我观察到这幅作品:
viewModel.piece.observe(this, Observer {piece ->
piece?.let {
viewModel.updateInputValues(piece)
}
})
ViewModel 中的 updateInputValues 函数简单地设置表单中的值:
fun updateInputValues(piece: Piece) {
Log.d("mylog", "value: " + piece.title) // logs correct value
form.title = piece.title // setting this does not change EditText
}
最后,在我的布局中,我尝试使用数据绑定在 EditText 中显示 form.title 中的文本:
<data>
<variable
name="viewModel"
type="com.example.tutorial.createedit.CreateEditPieceViewModel" />
</data>
<!-- ... -->
<EditText
android:id="@+id/input_title"
<!-- ... -->
android:inputType="text"
android:text="@={viewModel.form.title}" />
当我用这个片段打开屏幕时,EditText 是空的。我知道对片名的查询是正确的,因为我在设置 EditText 的文本属性之前记录了它。
当我在空字段中输入内容时viewModel.form.title
,将使用该值设置值。
为什么一开始就没有设置好?
解决方案
推荐阅读
- python - 如何使用 OpenCV 和 python 访问我的 USB 摄像头?
- javascript - Bootstrap vue datepicker显示UTC
- javascript - 有没有办法将主对象添加到 json 对象
- arrays - 如果列表到对象数组,则列出
- python - 通过遍历字典列表并基于熊猫中的特定日期条件创建一个新列
- android - 确保您的适配器调用 notifyDataSetChanged()
- c++ - QFutureWatcher 在切换到另一个future 后不会传递finished() 信号。这种行为是否记录在案?
- laravel - 在 laravel 中调用未定义的方法 stdClass::pluck()
- azure - 使用 powershell 从服务总线队列中获取所有带有信息的消息
- .net - Swagger 错误 用于操作的模糊 HTTP 方法 操作需要显式 HttpMethod 绑定