【发布时间】:2023-01-18 01:00:30
【问题描述】:
我正在尝试将 Jetpack compose 与我们拥有的一些遗留代码混合使用。希望这将是一个简单的修复,因为这是很少使用的应用程序的一部分。手头的问题是我正在尝试将具有数据绑定的旧视图添加到已经制作的撰写视图中
风景
@SuppressLint("ViewConstructor")
class TimeAndDateScroller @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0,
timePickerViewModel: TimeAndDatePickerViewModel,
) : LinearLayout(context, attrs, defStyle) {
var binding: ViewTimePickerBinding? = null
init {
binding = ViewTimePickerBinding.inflate(LayoutInflater.from(context), this, true).apply {
this.viewModel = timePickerViewModel
}
}
}
撰写视图
AndroidView(
factory = {
TimeAndDateScroller(it, timePickerViewModel = viewModel).apply {
layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
}
}, update = {
}
)
视图模型和 XML
据我所知,视图模型已正确传递。但是视图模型中的值不会触发监听 xml 视图
val isPickerEnabled: LiveData<Boolean> = selectedOption
.map {
it != TimeParamType.NOW
}
.asLiveData(Dispatchers.Main)
上面的值在视图模型中找到。但是永远不会触发相应的 xml 侦听器
android:alpha="@{viewModel.isPickerEnabled() ? 1f : 0.4f}"
【问题讨论】:
标签: android android-jetpack-compose android-databinding