2015-09-26 15 views
9

アンドロイドの日付選択ツールの過去の日付を無効にします。 私はこれが正常に動作していると日付ピッカーで過去の日付が無効になります日付選択ツールで無効な日付を選択することもできます

dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 

を使用することによってそれを行うことができます。しかし、私は以前の日付をクリックして選択することができます。 どうしたらいいのですか?以下 は私の日付ピッカーのスクリーンショットです: -

enter image description here

そして、ここでは、私が過去の日付を無効にしています私のコードです: -

@Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current date as the default date in the picker 
     final Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH); 
     int day = c.get(Calendar.DAY_OF_MONTH); 
     mActivity = new WeakReference<CreateEvent>(
       (CreateEvent) getActivity()); 

     DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day); 

     if(callingView==fromDate){ 
      dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 
     }else if (callingView==toDate){ 
      dialog.getDatePicker().setMinDate(fromD); 
     } 

     // Create a new instance of DatePickerDialog and return it 
     return dialog; 
    } 
+2

、あなたは下のバージョンで確認することができます。解決策としては、onDateSetメソッドのコールバックにロジックを適用する必要があります。 –

答えて

8

が、これがあることをコメントから知りましたLollipopのバグ。それで、それをプログラム的に修正しました。

あなたがする必要があるのは、選択された日付を最小日付の設定でチェックすることだけです。

+0

コードを共有できますか? –

+0

誰でもこの回答をサンプルコードで明確に記述できますか????? – Elizabeth

4

はいこれはバグであり、Javaコードを使用して選択した日付を確認する必要があります。今後の日のために

過去の日付の

public static boolean validatePastDate(Context mContext,int day,int month,int year){ 
    final Calendar c = Calendar.getInstance(); 
    int currentYear = c.get(Calendar.YEAR); 
    int currentMonth = c.get(Calendar.MONTH)+1; 
    int currentDay = c.get(Calendar.DAY_OF_MONTH); 
    if (day > currentDay && year == currentYear && month == currentMonth) { 
     Toast.makeText(mContext, "Please select valid date", Toast.LENGTH_LONG).show(); 
     return false; 
    } else if (month > currentMonth && year == currentYear) { 
     Toast.makeText(mContext, "Please select valid month", Toast.LENGTH_LONG).show(); 
     return false; 
    } else if (year > currentYear) { 
     Toast.makeText(mContext, "Please select valid year", Toast.LENGTH_LONG).show(); 
     return false; 
    } 

    return true; 
} 

public static boolean validateFutureDate(Context mContext,int day,int month,int year){ 
    final Calendar c = Calendar.getInstance(); 
    int currentYear = c.get(Calendar.YEAR); 
    int currentMonth = c.get(Calendar.MONTH)+1; 
    int currentDay = c.get(Calendar.DAY_OF_MONTH); 
    if (day < currentDay && year == currentYear && month == currentMonth) { 
     Toast.makeText(mContext, "Please select valid date", Toast.LENGTH_LONG).show(); 
     return false; 
    } else if (month < currentMonth && year == currentYear) { 
     Toast.makeText(mContext, "Please select valid month", Toast.LENGTH_LONG).show(); 
     return false; 
    } else if (year < currentYear) { 
     Toast.makeText(mContext, "Please select valid year", Toast.LENGTH_LONG).show(); 
     return false; 
    } 

    return true; 
} 

ただ、この方法で選択した日付の月、年を渡すと、ブール値を返します。以下のように日付を検証することができますAndroidのロリポップ用のバグを解決するには

0
datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 
+0

これはまさに質問です。このコードは正しく機能していません。 – deep

0

:それはロリポップでバグです

int mYear,mMonth,mDay; 
    Calendar mcurrentDate = Calendar.getInstance(); 
    mYear = mcurrentDate.get(Calendar.YEAR); 
    mMonth = mcurrentDate.get(Calendar.MONTH); 
    mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH); 


    DatePickerDialog mDatePicker = new DatePickerDialog(context, new DatePickerDialog.OnDateSetListener() { 
     public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) { 
     // TODO Auto-generated method stub 

     // validate here with condition to avoid to select past dates 
      if (selectedyear == mYear && (selectedmonth+1) == mMonth+1) { 
       if(selectedday < mDay){ 
        Toast.makeText(context, "invalid date", Toast.LENGTH_LONG).show(); 
        return; 
       } 
      } 


       textview.setText(selectedday + "/" + (selectedmonth+1) + "/" + selectedyear); 

     } 
    }, mYear, mMonth, mDay); 

    mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 
    if(!mDatePicker.isShowing()){ 
     mDatePicker.show(); 
    } 
関連する問題