как использовать setSelection на dateRangePicker материала-компонента? - PullRequest
1 голос
/ 17 июня 2020

Я хочу отображать выбранный диапазон дат при открытии dateRangePicker, я знал, что для этого предназначен метод setSelected, и я попробовал, что он не работает, или, может быть, я что-то делаю не так, пожалуйста, помогите

вот что я уже пробовал

public void openDateRangePicker(View view) {
 MaterialDatePicker.Builder builder =
                MaterialDatePicker.Builder.dateRangePicker();

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

        MaterialDatePicker<Pair<Long,Long>> picker = builder.build();
        builder.setCalendarConstraints(constraintsBuilder.build());

        picker.setStyle(DialogFragment.STYLE_NORMAL, R.style.Custom_MaterialCalendar_Fullscreen);
        if(!firstDateStr.isEmpty() || !endDateStr.isEmpty()){
            builder.setSelection(selectionDates);

        }
        picker.show(getSupportFragmentManager(), picker.toString());



    picker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Pair<Long, Long>>() {
        @Override
        public void onPositiveButtonClick(Pair<Long, Long> selection) {

            long firstDateLong = selection.first;
            Date firstDate=new Date(firstDateLong);
            long endDateLong = selection.second;
            Date endDate=new Date(endDateLong);

            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());

            //format yyyy-MM-dd
            firstDateStr = sdf2.format(firstDate);
            endDateStr = sdf2.format(endDate);
            selectionDates = selection;


            selectedDatesStr = firstDateStr + " to " + endDateStr ;//+ " (" + (daysBetween + 1) + " days)";
            tvDates.setText(selectedDatesStr);
            tvDates.setTypeface(Typeface.DEFAULT_BOLD);
            picker.dismiss();

        }
    }); 

}

то, что я сделал здесь, - это сохранить объект выбора и использовать его для отображения диапазона при открытии сборщика в следующий раз, но он открывается без какого-либо выбора, как будто он открывается в первый раз!

1 Ответ

2 голосов
/ 17 июня 2020

порядок ваших строк имеет значение, вам нужно позвонить builder.build(); после завершения настройки конструктора.

  String firstDateStr="";
  String endDateStr="";

Pair<Long, Long> selectionDates=null;
public void openDateRangePicker() {

   MaterialDatePicker.Builder builder =
            MaterialDatePicker.Builder.dateRangePicker();

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

    builder.setCalendarConstraints(constraintsBuilder.build());

   // picker.setStyle(DialogFragment.STYLE_NORMAL);
    if(selectionDates!=null){
        builder.setSelection(selectionDates);

    }
    MaterialDatePicker<Pair<Long,Long>> picker = builder.build();
    picker.show(getSupportFragmentManager(), picker.toString());



    picker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Pair<Long, Long>>() {
        @Override
        public void onPositiveButtonClick(Pair<Long, Long> selection) {

            long firstDateLong = selection.first;
            Date firstDate=new Date(firstDateLong);
            long endDateLong = selection.second;
            Date endDate=new Date(endDateLong);

            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());

            //format yyyy-MM-dd
            firstDateStr = sdf2.format(firstDate);
            endDateStr = sdf2.format(endDate);
            selectionDates = selection;


            selectedDatesStr = firstDateStr + " to " + endDateStr ;//+ " (" + (daysBetween + 1) + " days)";
           tvDates.setText(selectedDatesStr);
          tvDates.setTypeface(Typeface.DEFAULT_BOLD);
            picker.dismiss();

        }
    });

}
...