Android Можно ли вызвать функцию, чтобы прокрутить календарь до установленной даты? - PullRequest
1 голос
/ 02 апреля 2020
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 MaterialDatePicker в приложении android, которое я строю.

Приведенный выше код работает отлично. Однако, например, я установил дату 26/08/2018 и открыл диалоговое окно materialDatePicker, календарь прокручивается до текущей даты, а не до установленной даты. Я хочу, чтобы календарь открывался автоматически до установленной даты при открытии диалога. Я лихорадочно осмотрел inte rnet и не смог найти ответ. Пожалуйста, помогите мне!

Большое спасибо.

Извините! Это мой первый вопрос о переполнении стека. Надеюсь, я не нарушил ни одного из его принципов.

1 Ответ

0 голосов
/ 03 апреля 2020

Встань и сияй, говорят они. Сегодня утром я рад сообщить всем, кто читает это, что я нашел решение для этого. Надеюсь, это кому-нибудь поможет.

  1. Создание компоновщика ограничений.

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

Получение времени в миллисекундах из экземпляра календаря.

long openAt = calendar.getTimeInMillis ();

Установить openAt в Построитель ограничений календаря со временем, полученным в миллисекундах.

calendarConstraintsBuilder.setOpenAt (openAt);

Наконец, установите calendarConstraintsBuilder.constraints в экземпляр MaterialDatePicker.Builder.

builder.setCalendarConstraints (calendarConstraintsBuilder.build ());

Я знаю, что при переходе к определение setOpenAt (длинный месяц) снова вводит людей в заблуждение, и в качестве параметра они передают только месяц, публикуя c Builder setOpenAt (длинный месяц). Но чтение документации кода поможет вам понять, что вам нужно пройти время в миллисекундах. Весь код выглядит следующим образом.

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());
            }
        });
...