Je développe une application pour un hôtel (projet d'apprentissage personnel). Dans la page "Réserver maintenant", j'affiche 2 champs EditText
. Un pour la date d'arrivée et un autre pour la date de départ.setMinDate d'un DatePicker d'un autre DatePicker
J'ai défini le DatePicker
pour afficher uniquement les dates actuelles et futures en utilisant le setMinDate()
. Mais ce que je veux, c'est que le Check-out DatePicker
affiche (date d'arrivée + 1) comme dates sélectionnables. Ainsi, par exemple, si l'utilisateur sélectionne la date d'arrivée en tant que 24/10/2017, la sortie DatePicker
doit afficher les dates à partir du 25/10/2017.
BookFragment.java
public void onStart() {
super.onStart();
EditText inDate = v.findViewById(R.id.checkInDate);
inDate.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
DateDialog dialog = new DateDialog(view);
FragmentTransaction ft = getFragmentManager().beginTransaction();
dialog.show(ft, "Select Check-In Date");
}
});
EditText outDate = v.findViewById(R.id.checkOutDate);
outDate.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
EditText inDateText = v.findViewById(R.id.checkInDate);
if (TextUtils.isEmpty(inDateText.getText().toString())) {
Toast.makeText(getContext(), "Select Check-in Date first", Toast.LENGTH_SHORT).show();
} else {
DateDialog dialog = new DateDialog(view);
FragmentTransaction ft = getFragmentManager().beginTransaction();
dialog.show(ft, "Select Check-Out Date");
}
}
});
}
DateDialog.java
@SuppressLint("ValidFragment")
public class DateDialog extends DialogFragment implements DatePickerDialog.OnDateSetListener {
EditText dateText;
int cyear, cmonth, cday;
public DateDialog(View view) {
dateText = (EditText) view;
}
@NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
DatePickerDialog date = new DatePickerDialog(getActivity(), this, cyear, cmonth, cday);
final Calendar c = Calendar.getInstance();
Date currentDate = c.getTime();
cyear = c.get(Calendar.YEAR);
cmonth = c.get(Calendar.MONTH);
cday = c.get(Calendar.DAY_OF_MONTH);
date.getDatePicker().setMinDate(currentDate.getTime());
return date;
}
public void onDateSet(DatePicker view, int year, int month, int day) {
String date = day + "/" + (month + 1) + "/" + year;
dateText.setText(date);
}
book.xml
<EditText
android:id="@+id/checkInDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:focusable="false"
android:hint="@string/check_in_date"
android:inputType="date" />
<EditText
android:id="@+id/checkOutDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:focusable="false"
android:hint="@string/check_out_date"
android:inputType="date" />
Puisque les EditText appellent la même classe DateDialog, comment puis-je la date d'arrivée et l'utiliser pour setMinDate() pour check-out?
En ce moment, ce que je fais pour contourner le problème est d'obtenir la chaîne de date de EditText, en l'analysant dans une date et en faisant la même chose pour l'extraction. Lorsque l'utilisateur clique sur le bouton « Réserver », il vérifie si le check-out est antérieure à l'enregistrement à l'aide
if (odate.before(idate)) {
outDateText.setError("Check-Out must be after Check-In");
Toast.makeText(getContext(), "Check-Out Date must be after Check-In Date", Toast.LENGTH_SHORT).show();
flag = 1;
}
Cela fait le travail, mais je préfère avoir les dates désactivées qui sont avant la date d'arrivée .
vous obtenez une erreur – UltimateDevil
@UltimateDevil Non –