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

Android中MaterialDatePicker如何获取选中日期?无onDateSet类监听

解决MaterialDatePicker获取选中日期的问题

嘿,你找不到OnDateSetListener完全正常!因为在Material Components库(你用的1.2.0-alpha01版本)里,MaterialDatePicker并没有沿用传统的onDateSet回调,而是用了**addOnPositiveButtonClickListener**来监听用户确认选择的操作。

下面给你修改后的完整代码,直接就能获取日期范围的选中值:

// 原来的构建代码不变
MaterialDatePicker.Builder<Pair<Long, Long>> builder = MaterialDatePicker.Builder.dateRangePicker();
CalendarConstraints.Builder constraintsBuilder = new CalendarConstraints.Builder();
builder.setCalendarConstraints(constraintsBuilder.build());
int dialogTheme = resolveOrThrow(getContext(), R.attr.materialCalendarTheme);
builder.setTheme(dialogTheme);
MaterialDatePicker<Pair<Long, Long>> picker = builder.build();

// 添加日期选择确认的监听
picker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Pair<Long, Long>>() {
    @Override
    public void onPositiveButtonClick(Pair<Long, Long> selection) {
        // 获取选中的开始和结束时间戳
        long startTimestamp = selection.first;
        long endTimestamp = selection.second;
        
        // 把时间戳转换成你需要的日期格式,比如yyyy-MM-dd
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
        String startDate = dateFormat.format(new Date(startTimestamp));
        String endDate = dateFormat.format(new Date(endTimestamp));
        
        // 这里就可以使用选中的日期啦
        // 比如打印日志或者更新UI
        Log.i("DatePicker", "开始日期:" + startDate + ",结束日期:" + endDate);
    }
});

picker.show(getFragmentManager(), picker.toString());

几个小提醒:

  • 因为你用的是日期范围选择器,所以回调参数是Pair<Long, Long>,第一个值是开始日期的时间戳,第二个是结束日期的时间戳;如果是单个日期选择器,参数会是Long类型。
  • 记得处理时间戳的时区问题哦,MaterialDatePicker默认用的是UTC时间,如果你需要对应本地时区,可以在转换日期的时候调整,或者在构建CalendarConstraints的时候设置时区。
  • 如果你还需要监听取消、关闭等操作,可以用addOnCancelListener、addOnDismissListener这些方法。

内容的提问来源于stack exchange,提问作者Erjon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:40:29