Search code examples
androidandroid-edittextandroid-datepicker

DatePicker dialog with preselected value from edittext


I have a datepicker dialog that opens on clicking on edittext. What i want is that when i click on edittext the datepicker dialog should show date that was already present in edittext.

My code: Xml code:

<EditText
            android:id="@+id/dob"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:inputType="date"
            android:hint="Date Of Birth"
            android:textSize="12sp"
         android:drawableRight="@drawable/ic_perm_contact_calendar_black_24dp"
            android:drawableTint="@android:color/holo_orange_light"/>

Java code:

dob.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Calendar myCalendar = Calendar.getInstance();
                DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                        // TODO Auto-generated method stub
                        myCalendar.set(Calendar.YEAR, year);
                        myCalendar.set(Calendar.MONTH, monthOfYear);
                        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                        String myFormat = "dd-MMM-yyyy"; // your format
                        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.getDefault());

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

                };
                new DatePickerDialog(PersonalDetailsFormActivity.this, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();

            }
        });

I have been through many links online but all show how to set date in edittext but what i want opposite to this. There is a value in edittext and the datepicker dialog should open with that date as pre-selected value.


Solution

  • Try this

    Enter Date in MM/DD/YYYY Format and Click on Edittext so DatePicker popup with entered date.

    MainActivity.java

    package mydemo.com.datepiker;
    
    import android.app.DatePickerDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.DatePicker;
    import android.widget.EditText;
    import android.widget.Toast;
    
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    public class MainActivity extends AppCompatActivity {
    
        String date = "";
        EditText edittext;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            edittext = (EditText) findViewById(R.id.edittext);
            edittext.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); // Make sure user insert date into edittext in this format.
                    Date dateObject;
                    try {
                        String dob_var = (edittext.getText().toString());
                        dateObject = formatter.parse(dob_var);
                        date = new SimpleDateFormat("dd/MM/yyyy").format(dateObject);
    
                        String[] items1 = date.split("/");
                        String d1 = items1[0];
                        String m1 = items1[1];
                        String y1 = items1[2];
                        int d = Integer.parseInt(d1);
                        int m = Integer.parseInt(m1);
                        int y = Integer.parseInt(y1);
    
                        DatePickerDialog datePicker = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
                            @Override
                            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                                String date = String.valueOf(dayOfMonth) + "/" + String.valueOf(monthOfYear + 1)
                                        + "/" + String.valueOf(year);
                                edittext.setText(date);
                            }
                        }, y, m - 1, d);
                        datePicker.show();
    
                    } catch (java.text.ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        Log.i("Exception is: ", e.toString());
                    }
                }
            });
        }
    }
    

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="mydemo.com.datepiker.MainActivity">
    
        <EditText
            android:id="@+id/edittext"
            android:layout_width="match_parent"
            android:hint="Enter Date:"
            android:layout_height="wrap_content" />
    
    </android.support.constraint.ConstraintLayout>
    

    enter image description here

    Hope this may help you now.