Arpan Sarkar
Arpan Sarkar

Reputation: 199

Multiple datepicker for Edittext in same activity

In my app I have two edittext and I want when click on that two edittext datepicker dialog open and set two value in edit text.

final 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);
            updateDOB();
            updateDOA();
        }

    };
    doa.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new DatePickerDialog(FamilyEditActivity.this, date, myCalendar
                    .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                    myCalendar.get(Calendar.DAY_OF_MONTH)).show();
        }
    });
    spoucedob.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new DatePickerDialog(FamilyEditActivity.this, date, myCalendar
                    .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                    myCalendar.get(Calendar.DAY_OF_MONTH)).show();
        }
    });
}

private void updateDOA() {
    String myFormat = "yyyy-MM-dd";
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
    doa.setText(sdf.format(myCalendar.getTime()));
}
private void updateDOB() {
    String myFormat = "yyyy-MM-dd";
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
    spoucedob.setText(sdf.format(myCalendar.getTime()));
}

this is my code.When I set date in one edittext, it change other edittext value in same time.Please tell me what is the problem... Thanks.

Upvotes: 3

Views: 1225

Answers (1)

forpas
forpas

Reputation: 164099

Declare a variable at the class level:

EditText clickedEditText;

and inside the click listeners set it to the clicked EditText:

doa.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        clickedEditText = (EditText) view;
        new DatePickerDialog(FamilyEditActivity.this, date, myCalendar
                .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                myCalendar.get(Calendar.DAY_OF_MONTH)).show();
    }
});
spoucedob.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        clickedEditText = (EditText) view;
        new DatePickerDialog(FamilyEditActivity.this, date, myCalendar
                .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                myCalendar.get(Calendar.DAY_OF_MONTH)).show();
    }
});

Now you only need 1 method update():

private void update() {
    String myFormat = "yyyy-MM-dd";
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
    clickedEditText.setText(sdf.format(myCalendar.getTime()));
}

and in onDateSet():

final 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);
            update();
        }
};

Upvotes: 6

Related Questions