Date and time selection

I want to limit the past dates that should be disabled, and the date of the date selection should show the next future dates in the future, how can I change the program

package com.sample.DatePickerExample; import android.app.Activity; import java.util.Calendar; import android.app.DatePickerDialog; import android.widget.DatePicker; import android.app.Dialog; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class DatePickerExampleActivity extends Activity { private TextView mDateDisplay; private int mYear; private int mMonth; private int mDay; static final int DATE_DIALOG_ID = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.date_picker); mDateDisplay = (TextView) findViewById(R.id.dateDisplay); Button pickDate = (Button) findViewById(R.id.pickDate); pickDate.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { showDialog(DATE_DIALOG_ID); } }); final Calendar c = Calendar.getInstance(); mDay = c.get(Calendar.DAY_OF_MONTH); mMonth = c.get(Calendar.MONTH); mYear = c.get(Calendar.YEAR); updateDisplay(); } @Override protected Dialog onCreateDialog(int id) { switch (id) { case DATE_DIALOG_ID: return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay); } return null; } protected void onPrepareDialog(int id, Dialog dialog) { switch (id) { case DATE_DIALOG_ID: ((DatePickerDialog) dialog).updateDate(mYear, mMonth, mDay); break; } } private void updateDisplay() { mDateDisplay.setText( new StringBuilder() // Month is 0 based so add 1 .append(mDay).append("-") .append(mMonth + 1).append("-") .append(mYear).append(" ")); } private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mDay = dayOfMonth; mYear = year; mMonth = monthOfYear; updateDisplay(); } }; 

}

+4
source share
1 answer

First, you can use the DatePicker widget to do this. It has built-in methods for setting the range.

But since you are using DatePickerDialog , you need to have a special implementation. You need to programmatically change the selected date to the default when an unwanted date is selected.

Follow this code:

 public class MyDatePickerDialog extends DatePickerDialog{ private Date maxDate; private Date minDate; public MyDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) { super(context, callBack, year, monthOfYear, dayOfMonth); init(year, monthOfYear, dayOfMonth); } public MyDatePickerDialog(Context context, int theme, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) { super(context, theme, callBack, year, monthOfYear, dayOfMonth); init(year, monthOfYear, dayOfMonth); } private void init(int year, int monthOfYear, int dayOfMonth){ Calendar cal = Calendar.getInstance(); cal.set(1970, Calendar.JANUARY, 1); minDate = cal.getTime(); cal.set(3000, Calendar.JANUARY, 1); maxDate = cal.getTime(); cal.set(year, monthOfYear, dayOfMonth); } public void onDateChanged (final DatePicker view, int year, int month, int day){ Calendar cal = Calendar.getInstance(); cal.set(year, month, day); Date currentDate = cal.getTime(); final Calendar resetCal = cal; if(!minDate.before(currentDate) ){ cal.setTime(minDate); view.updateDate(resetCal.get(Calendar.YEAR), resetCal.get(Calendar.MONTH), resetCal.get(Calendar.DAY_OF_MONTH)); }else if(maxDate.before(currentDate)){ cal.setTime(maxDate); view.updateDate(resetCal.get(Calendar.YEAR), resetCal.get(Calendar.MONTH), resetCal.get(Calendar.DAY_OF_MONTH)); } } public void setMaxDate(Date date){ this.maxDate = date; } public void setMinDate(Date date){ this.minDate = date; } } 

Herrmann Original Work Response Credits

+2
source

Source: https://habr.com/ru/post/1468889/


All Articles