Android 有什么函数可以让我将日历滚动到设置的日期吗?

Android Is there function I can call to scroll the calendar to the set date?

Calendar calendar = Calendar.getInstance();
        MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();
        builder.setTitleText(R.string.title_pick_a_date);
        if (dateDF == null) {
            builder.setSelection(calendar.getInstance().getTimeInMillis());
        } else {
            String date = dateDF.toString();
            calendar.setTime(dateDF);
            builder.setSelection(calendar.getTimeInMillis());
        }
        MaterialDatePicker<Long> picker = builder.build();
        picker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Long> 
          () {
            @Override
            public void onPositiveButtonClick(Long selection) {
                calendar.setTimeInMillis(selection);
                calendar.setTimeZone(calendar.getTimeZone());
                int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
                int month = calendar.get(Calendar.MONTH);
                int year = calendar.get(Calendar.YEAR);
                String dateSF = dayOfMonth + "/" + (month + 1) + "/" + year;
                calendar.set(year, month, dayOfMonth);
                Date date = calendar.getTime();
                String a = "a";
                binding.layoutContentFeedFormulaDetails.tIeDate.setText(dateSF);
                binding.layoutContentFeedFormulaDetails.tIeDate.setTag(calendar.getTime());
            }
        });

        binding.layoutContentFeedFormulaDetails.btnDatePicker.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                picker.show(getSupportFragmentManager(), picker.toString());
            }
        });

嗨,

我正在构建的 android 应用程序中使用 android MaterialDatePicker。

上面的代码工作得很好。但是,例如,我将日期设置为 26/08/2018 并打开 materialDatePicker 对话框,日历滚动到当前日期而不是设置日期。我希望日历在打开对话框时自动滚动到设置的日期。我疯狂地在互联网上四处寻找,找不到答案。请帮我!

非常感谢。

对不起!这是我关于 Stack overflow 的第一个问题。我希望我没有违反它的任何准则。

他们说崛起和闪耀。今天早上,我很高兴地通知任何读到这篇文章的人,我找到了解决这个问题的方法。我希望这对某人有所帮助。

  1. 创建约束生成器。

CalendarConstraints.Builder calendarConstraintsBuilder = new CalendarConstraints.Builder();

  1. 从日历实例中获取时间(以毫秒为单位)。

long openAt = calendar.getTimeInMillis();

  1. 将 openAt 设置为以毫秒为单位获取时间的日历约束生成器。

calendarConstraintsBuilder.setOpenAt(openAt);

  1. 最终将 calendarConstraintsBuilder.constraints 设置为 MaterialDatePicker.Builder 实例。

builder.setCalendarConstraints(calendarConstraintsBuilder.build());

我知道通过查看 setOpenAt(long month) 的定义,它再次误导人们通过查看 public Builder setOpenAt(long month) 再次将月份作为参数传递).但是阅读代码文档可以帮助您了解需要传递的时间(以毫秒为单位)。 整个代码如下。

MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();
        CalendarConstraints.Builder calendarConstraintsBuilder = new CalendarConstraints.Builder();
        builder.setTitleText(R.string.title_pick_a_date);
        if (dateDF == null) {
            builder.setSelection(Calendar.getInstance().getTimeInMillis());
        } else {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(dateDF);
            long openAt = calendar.getTimeInMillis();
            calendarConstraintsBuilder.setOpenAt(openAt);
            builder.setCalendarConstraints(calendarConstraintsBuilder.build());
            builder.setSelection(calendar.getTimeInMillis());
        }
        MaterialDatePicker<Long> picker = builder.build();
        picker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Long>() {
            @Override
            public void onPositiveButtonClick(Long selection) {
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(selection);
                calendar.setTimeZone(calendar.getTimeZone());
                int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
                int month = calendar.get(Calendar.MONTH);
                int year = calendar.get(Calendar.YEAR);
                String dateSF = dayOfMonth + "/" + (month + 1) + "/" + year;
                calendar.set(year, month, dayOfMonth);
                binding.layoutContentFeedFormulaDetails.tIeDate.setText(dateSF);
                binding.layoutContentFeedFormulaDetails.tIeDate.setTag(calendar.getTime());
            }
        });

        binding.layoutContentFeedFormulaDetails.btnDatePicker.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                picker.show(getSupportFragmentManager(), picker.toString());
            }
        });