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