You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:36:07