7

I am using a default date picker in android, now I want close the dialog box after Selecting date the date picker should close in android without clicking okay button

    private void updateDOB() {
    String myFormat = "yyyy/MM/dd"; //In which you need put here
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
          btnDOB.setText(sdf.format(calendar.getTime()));
             tvDOB.setTextColor(ContextCompat.getColor(getApplicationContext(),    R.color.colorPrimary));
}

private void selectDOB() {
    DatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int year, int month, int day) {
            calendar.set(Calendar.YEAR, year);
            calendar.set(Calendar.MONTH, month);
            calendar.set(Calendar.DAY_OF_MONTH, day);
            updateDOB();
        }
    };
    new DatePickerDialog(ActivityAddChild.this, listener,
            calendar.get(Calendar.YEAR),
            calendar.get(Calendar.MONTH),
            calendar.get(Calendar.DAY_OF_MONTH)).show();
} 
ajay110125
  • 81
  • 2
  • 5

2 Answers2

4

@Override the onDateChanged and dismiss(); it.

new DatePickerDialog(context, null, year, month, day) {
    @Override
    public void onDateChanged(@NonNull DatePicker view, int year, int month, int dayOfMonth) {
        /* Here you got the date without "OnDateSetListener" */

        dismiss();
    }
}.show();

Referenced from this answer.

Note that this doesn't work on Android 5.0, see there.

Use MaterialDateTimePicker instead.

Jie Wang
  • 620
  • 1
  • 10
  • 17
0
class CustomDatePickerDialog(
        context: Context,
        private val calendar: Calendar,
        private val callback: (newTimestamp: Long) -> Unit
) : DatePickerDialog(context, createListener(calendar, callback), calendar[Calendar.YEAR], calendar[Calendar.MONTH], calendar[Calendar.DAY_OF_MONTH]) {

    override fun onDateChanged(view: DatePicker, year: Int, month: Int, dayOfMonth: Int) {
        super.onDateChanged(view, year, month, dayOfMonth)
        dateChangeHandler(year, month, dayOfMonth, calendar, callback)
        dismiss()
    }

    companion object {
        fun dateChangeHandler(year: Int, month: Int, day: Int, calendar: Calendar, callback: (newTimestamp: Long) -> Unit) {
            calendar[year, month, day, 0, 0] = 0
            callback(calendar.timeInMillis)
        }

        fun createListener(calendar: Calendar, callback: (newTimestamp: Long) -> Unit) = OnDateSetListener { _: DatePicker?, i: Int, i1: Int, i2: Int ->
            dateChangeHandler(i, i1, i2, calendar, callback)
        }
    }
}


fun Context.calendarOnClick(currentDate: Long?, callback: (newTimestamp: Long) -> Unit) {
    val calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"))
    currentDate?.let { calendar.timeInMillis = it }
    CustomDatePickerDialog(this, calendar, callback).show()
}
Liam Kernighan
  • 2,335
  • 1
  • 21
  • 24