我正在開發一個酒店應用程序(個人學習項目)。在「立即預訂」頁面中,我正在顯示2 EditText
字段。一個用於入住日期,另一個用於退房日期。來自另一個DatePicker的DatePicker的setMinDate
我已將DatePicker
設置爲僅使用setMinDate()
顯示當前和未來日期。但我想要的是,退房DatePicker
應顯示(入住日期+ 1)作爲可選日期。
因此,例如,如果用戶選擇入住日期爲2017年10月24日,則退房DatePicker
應顯示2017年10月25日之前的日期。
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" />
由於兩個EditText上呼籲同DateDialog類,我怎麼能得到簽入日期並使用setMinDate()進行簽出?
現在,我正在做的解決方法是從EditText獲取日期字符串,將其解析爲日期並執行相同的檢出操作。當用戶點擊「預訂」按鈕,它會檢查退房是否早於登記入住使用
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;
}
該做的工作,但我寧願有禁用日期這是前入住日期。
你得到任何錯誤 – UltimateDevil
@UltimateDevil沒有 –