Android Kotlin日期选择器对话框代码报错:类型不匹配问题求助
问题解决:Type mismatch: inferred type is Int but LocalDate was expected
错误原因很明确:你调用viewModel.onDateSelected(year, month, dayOfMonth)时,传入的三个参数都是Int类型,但ViewModel的onDateSelected方法要求的参数是LocalDate类型,所以出现类型不匹配。
解决步骤
把DatePicker返回的年、月、日三个Int值转换成LocalDate对象再传入,注意DatePicker的月份是从0开始计数的(比如1月对应0,12月对应11),转换时要给月份加1,适配LocalDate从1开始的月份规则。
修改后的代码:
private val datePickerDialog by lazy { DatePickerDialog(requireActivity(), R.style.DatePicker).apply { setTitle(R.string.select_date) datePicker.maxDate = LocalDate.now().minusDays(0).toMillis() setOnDateSetListener { _, year, month, dayOfMonth -> // 转换为LocalDate,注意月份+1 val selectedLocalDate = LocalDate.of(year, month + 1, dayOfMonth) viewModel.onDateSelected(selectedLocalDate) } } }
额外注意
如果你的项目是低版本Android(API < 26),需要确保已经配置了Java Time的兼容支持(比如开启Desugar或者引入ThreeTenABP库),否则LocalDate相关API会无法正常使用。
内容的提问来源于stack exchange,提问作者TopaZ
相关产品推荐
相关产品推荐

