数据绑定和 MVVM。通过单击按钮显示 DatePickerDIalog

Dmi*_*kov 5 android mvvm android-databinding android-architecture-components

现在我有这个代码:

class MyFragment : DaggerFragment() {
    ...
    private fun setTimePickerDialog() {
        binding.timeButton.setOnClickListener{
            val calendar = viewModel.calendar
            val curHourOfDay = calendar.get(Calendar.HOUR_OF_DAY)
            val curMinute = calendar.get(Calendar.MINUTE)
            val dialog = TimePickerDialog(context, { _, hourOfDay, minute ->
                 val c = Calendar.getInstance()
                 c.set(1970, 0, 1, hourOfDay, minute)
                 viewModel.time.value = SimpleDateFormat("HH:mm:ss").format(c.time)
            }, curHourOfDay, curMinute, true)
            dialog.show()
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想利用 DataBinding 库而不是setOnClickListener在我的片段中写入。但我无法将此代码移至ViewModel,因为需要上下文。通过使用 DataBinding 和 MVVM 单击按钮来显示 DatePickerDialog 的简洁方法是什么?

Abr*_*hew 4

为什么不能在 xml 中使用处理程序而不是视图模型。然后使用处理程序获得点击。在 XML 中 --> 使用一个名为 handler 的变量,其类型是片段的路径

<data class ="binding">
    <variable name="handler" type="com.MyFragment"/>
</data>

android:onClick="@{()->handler.onDisplayTimePickerDialogClick()}
Run Code Online (Sandbox Code Playgroud)