2017-10-09 86 views
-2

我正在開發一個酒店應用程序(個人學習項目)。在「立即預訂」頁面中,我正在顯示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; 
    } 

該做的工作,但我寧願有禁用日期這是前入住日期。

+0

你得到任何錯誤 – UltimateDevil

+0

@UltimateDevil沒有 –

回答

0

讓你Date

String string_date = "24/10/2017"; 

然後,增加一天你的當前日期

Calendar cal = Calendar.getInstance(); 
cal.setTime(string_date); 
cal.add(Calendar.DATE, 1); 
checkOutDate = cal.getTimeInMillis(); 

然後設置minDatedatePicker

datePicker.setMinDate(checkOutDate - 1000); 

編輯

創建您的DateDialog

globallong變量dateToSet - long dateToSet;

改變你的constructor

public DateDialog(View view) { 
dateText = (EditText) view; 
} 

public DateDialog(View view, long dateToSet) { 
dateText = (EditText) view; 
//then update the value of dateToSet here 
this.dateToSet = dateToSet 
} 

然後爲Editext 1使用本

else { 
      Date currentDate = c.getTime(); 
      cyear = c.get(Calendar.YEAR); 
      cmonth = c.get(Calendar.MONTH); 
      cday = c.get(Calendar.DAY_OF_MONTH); 
      DateDialog dialog = new DateDialog(view,currentDate.getTime()); 
      FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      dialog.show(ft, "Select Check-Out Date"); 
     } 

Editext 2使用本

//String string_date = "24/10/2017"; 
//getting current date from editText 1 
String string_date = editText.getText().toString(); 
//check the string must not be null 
//then, increase one day to your current date 

Calendar cal = Calendar.getInstance(); 
cal.setTime(string_date); 
cal.add(Calendar.DATE, 1); 
checkOutDate = cal.getTimeInMillis(); 
DateDialog dialog = new DateDialog(view,checkOutDate); 
FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      dialog.show(ft, "Select Check-Out Date"); 

然後你onCreateDialog必須

public Dialog onCreateDialog(Bundle savedInstanceState) { 

DatePickerDialog date = new DatePickerDialog(getActivity(), this, cyear, cmonth, cday); 
final Calendar c = Calendar.getInstance(); 
date.getDatePicker().setMinDate(dateToSet); 
return date; 

} 

可以幫助你

+0

是的,但如何獲得和使用字符串退房的DatePicker既是EditText上呼籲同DateDialog類? –

+0

然後再創建一個 – UltimateDevil

+0

首先從EditText上的字符串,然後這個保存爲一個字符串,然後 – UltimateDevil