web-dev-qa-db-fra.com

MatérielDatePicker obtenir des dates sélectionnées

J'appelle un matérialDatePicker comme celui-ci à Android:

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<?> picker = builder.build();

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

la bibliothèque est:

dependencies {
    implementation 'com.google.Android.material:material:1.2.0-alpha01'
}

Comment puis-je obtenir la date sélectionnée de ce calendrier? Je ne trouve aucun auditeur comme onDateSet ou OnDateSetListener

6
Erjon

Il suffit d'utiliser le addOnPositiveButtonClickListener L'auditeur a appelé lorsque l'utilisateur confirme une sélection valide:

Pour A Date unique Picker:

picker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Long>() {
      @Override public void onPositiveButtonClick(Long selection) {
        // Do something...
      }
    });

Pour un Picker Date de la plage:

MaterialDatePicker<Pair<Long, Long>> pickerRange = builderRange.build();
pickerRange.show(....);

pickerRange.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Pair<Long, Long>>() {
  @Override public void onPositiveButtonClick(Pair<Long,Long> selection) {
   //Do something...
  }
});
6
Gabriele Mariotti

Pour ceux qui luttent avec cela et le fait que leur horodatage est terminé une journée, voici ma solution de travail. J'ai une exigence d'API 23 Donc, je ne pouvais donc utiliser aucune des belles fonctions Epoch en Java.time. *. La clé pour moi était de réaliser que j'ai besoin de faire le fuseau horaire compensant les mathématiques.

        picker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Long>() {
        @Override
        public void onPositiveButtonClick(Long selectedDate) {
            // user has selected a date
            // format the date and set the text of the input box to be the selected date
            // right now this format is hard-coded, this will change
            ;
            // Get the offset from our timezone and UTC.
            TimeZone timeZoneUTC = TimeZone.getDefault();
            // It will be negative, so that's the -1
            int offsetFromUTC = timeZoneUTC.getOffset(new Date().getTime()) * -1;

            // Create a date format, then a date object with our offset
            SimpleDateFormat simpleFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
            Date date = new Date(selectedDate + offsetFromUTC);

            dataEntry.setText(simpleFormat.format(lDate));
        }
    });
    picker.show(myActivity.getSupportFragmentManager(), picker.toString());
2
GR Envoy

J'ai cherché autour de moi et j'ai découvert de nombreux matériaux DatePicker gamme Obtenir des solutions de dates sélectionnées ont été obsolètes.

J'utilise dateRangePicker dans mon projet, donc ci-dessous, les codes sont uniquement pour dateRangePicker() Parce que je dois obtenir la date de début et la date de fin.

Dans mon Java code d'activité:

            materialDatePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener() {
            @Override
            public void onPositiveButtonClick(Object selection) {
//                Get the selected DATE RANGE
                Pair selectedDates = (Pair) materialDatePicker.getSelection();
//              then obtain the startDate & endDate from the range
                final Pair<Date, Date> rangeDate = new Pair<>(new Date((Long) selectedDates.first), new Date((Long) selectedDates.second));
//              assigned variables
                Date startDate = rangeDate.first;
                Date endDate = rangeDate.second;
//              Format the dates in ur desired display mode
                SimpleDateFormat simpleFormat = new SimpleDateFormat("dd MMM yyyy");
//              Display it by setText
                datedisplay.setText("SELECTED DATE : " +  simpleFormat.format(startDate) + " Second : " + simpleFormat.format(endDate));
            }

        });

Sortie d'échantillon:

material datepicker AndroidDatepicker Output

1
Vix Coder