Search code examples
androidandroid-edittextandroid-datepicker

How to set DatePickerDialog value to EditText?


I want to set the value of DatePickerDialog value to EditText with (sdf.format(myCalendar.getTime()));. I have tried it this way, but it doesn't work. How to fix it?

Below is my code:

Calendar myCalendar;
DatePickerDialog.OnDateSetListener date;

private int pYear;
private int pMonth;
private int pDay;
static final int DATE_DIALOG_ID = 0;

myCalendar = Calendar.getInstance();
pYear = myCalendar.get(Calendar.YEAR);
pMonth = myCalendar.get(Calendar.MONTH);
pDay = myCalendar.get(Calendar.DAY_OF_MONTH);

dobET.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        showDialog(DATE_DIALOG_ID);
    }
});

public Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        date = new DatePickerDialog.OnDateSetListener() {
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                pYear = year;
                pMonth = monthOfYear;
                pDay = dayOfMonth;

                updateLabel();
            }
        };
        DatePickerDialog dialog = new DatePickerDialog(this, date, pYear, pMonth, pDay);
        dialog.getDatePicker().setMaxDate(new Date().getTime());
        return dialog;
    }
    return null;
}

private void updateLabel() {
    String myFormat = "MM-dd-yyyy"; // In which you need put here
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);

    String myFormat2 = "yyyy-MM-dd"; // In which you need put here
    SimpleDateFormat sdf2 = new SimpleDateFormat(myFormat2, Locale.US);
    dateToSave = sdf2.format(myCalendar.getTime());
    saveDOBPrefEditor.putString("DOB", dateToSave);
    saveDOBPrefEditor.commit();

    dobET.setText(sdf.format(myCalendar.getTime()));
}

Solution

  • Try this

    DatePickerDialog dialog = null;
    Calendar myCalendar = Calendar.getInstance();
    dobET.setKeyListener(null);
    
    DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() 
    {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
        {
            myCalendar.set(Calendar.YEAR, year);
            myCalendar.set(Calendar.MONTH, monthOfYear);
            myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            updateLabel();
        }
    };
    
    dobET.setOnClickListener(new View.OnClickListener() 
        {           
            @Override
            public void onClick(View v) 
            {
                InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                keyboard.hideSoftInputFromWindow(dobET.getWindowToken(), 0);
    
                if(!dialog.isShowing()) {
                    dialog.show();
                }
                Log.d(TAG, "Click Listener fired");
            }
        });
    
        dobET.setOnFocusChangeListener(new OnFocusChangeListener() {
    
            @Override
            public void onFocusChange(View arg0, boolean hasFocus) {
                InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                keyboard.hideSoftInputFromWindow(
                        dobET.getWindowToken(), 0);
    
                if(hasFocus && !(dialog.isShowing())) {
                    dialog.show();
                }
    
                Log.d(TAG, "Focus Listener " + hasFocus);
            }
        });
    
    dialog = new DatePickerDialog(MainActivity.this, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                myCalendar.get(Calendar.DAY_OF_MONTH));
    private void updateLabel() 
    {
        String myFormat = "MM/dd/yy"; //In which you need put here
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
    
        dobET.setText(sdf.format(myCalendar.getTime()));
    }
    

    hope this helps ....