Set date of datepickerdialog from EditText

abdfahim picture abdfahim · Nov 11, 2013 · Viewed 11.4k times · Source

I am very much surprised that I couldn't find this in net even after 1 hour searching!

I have a date picker dialog slightly modified from the original Pickers example (thanks to Raghunandan for this).

But I do not want to set the default date as current date, rather it should pick the date from EditText and set that date to datepickerdialog. Can anybody please help me solving this? My current code stands as below.

EDITED I need to know how I can access the value of EditText datepurchased from inside DatePickerFragment class.

MAIN CLASS:

public class EditEntry extends Activity  implements DatePickerFragment.TheListener{
    EditText edit_datepurchased;
public void showdate(View v) {
        edit_datepurchased = (EditText) findViewById(v.getId());
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getFragmentManager(), "datePicker");
    }
public void returnDate(String date) {
        edit_datepurchased.setText(date);
    }
}

DatePickerFragment CLASS:

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
    TheListener listener;

    public interface TheListener{
        public void returnDate(String date);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState){

        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);
        listener = (TheListener) getActivity(); 
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day){
        Calendar c = Calendar.getInstance();
        c.set(year, month, day);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = sdf.format(c.getTime());
        if (listener != null) 
        {
          listener.returnDate(formattedDate); 

        }
          //listener.returnDate(year+"-"+(month+1)+"-"+day);
    }
}

n.b.: I have a question here on same code before, but I don't know how to add question in old thread.

Answer

tyczj picture tyczj · Nov 11, 2013

Using SimpleDateFormat you can convert the date in the edittext to milliseconds.

example:

DateFormat df = new SimpleDateFormat("MM/dd/yyyy",Locale.US);

you will need to adjust the format based on how you are displaying it but after that just use the parse method from the DateFormat object

Date d = df.parse(dateString);

then create a Calendar object and set the date

Calendar calendar = Calendar.getInstance();
calendar.setDate(d);

Edit:

to send the text from the EditText you need to send the string in the bundle when you create the dialogfragment

example:

DialogFragment newFragment = new DatePickerFragment();
Bundle bundle = new Bundle();
bundle.putString("dateAsText",edit_datepurchased.getText().toString());
newFragment.setArguments(bundle); 
newFragment.show(getFragmentManager(), "datePicker");

then in your dialogfragment use getArguments() to get the bundle

Bundle bundle = getArguments();
String date = bundle.getString("dateAsText");