Question

I am using DatePickerDialog in my application. It is Fragment. Now, Issue is that when I couch on EditText, It open dialog 3 times.

I am using Total 2 DatePickerDialog for 2 different EditText and 2 TimePickerDialog for 2 different EditText here.

My Code :

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

((EditText) etIOStartDate).setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub

        new DatePickerDialog(getActivity(), StartDate, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();
    return false;
    }
});
}
DatePickerDialog.OnDateSetListener StartDate = 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-MM-yyyy";
            SimpleDateFormat sdf = new SimpleDateFormat(myFormat,
                    Locale.getDefault());

            ((EditText) etIOStartDate)
                    .setText(sdf.format(myCalendar.getTime()));
        }
    };

Please help me to solve the problem.

Was it helpful?

Solution

Try this. There are two events Action down and Action up.

((EditText) etIOStartDate).setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {
            // TODO Auto-generated method stub
            switch(arg1.getAction())
            {
            case MotionEvent.ACTION_DOWN :
                new DatePickerDialog(getActivity(), StartDate, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();
                break;
            case MotionEvent.ACTION_UP  :
                break;

            }

            return true;
        }
    });

OTHER TIPS

just setOnClickListener to EditText

you have used setOnTouchListener so it finds 2-3 times touch so it will open

you have to maintain one global variable to check is your datepicker is opened or not. When you open datepicker assign that variable to true.

boolean isDatePickerOpened=false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

((EditText) etIOStartDate).setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub

if(!isDatePickerOpened){

   isDatePickerOpened=true;
        new DatePickerDialog(getActivity(), StartDate, myCalendar.get(Calendar.YEAR),       myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
    return false;
    }
});
}


DatePickerDialog.OnDateSetListener StartDate = 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-MM-yyyy";
            SimpleDateFormat sdf = new SimpleDateFormat(myFormat,
                    Locale.getDefault());

            ((EditText) etIOStartDate)
                    .setText(sdf.format(myCalendar.getTime()));

                isDatePickerOpened=false;

        }
    };

when date picker dialog dismissed you have to set that isDatePickerOpened to false. This may help you..

Use this under onCreate()

txtDate = (EditText) findViewById(R.id.etSdate);
txtDate.setOnClickListener(new View.OnClickListener() 
{
        @Override
        public void onClick(View v) 
        {
            etSdate();
        }

});

call this function in end of your program

public void etSdate()
   {
       {

            // Process to get Current Date
            final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);

            // Launch Date Picker Dialog
            DatePickerDialog dpd = new DatePickerDialog(this,
                    new DatePickerDialog.OnDateSetListener() {

                        @Override
                        public void onDateSet(DatePicker view, int year,
                                int monthOfYear, int dayOfMonth) {
                            // Display Selected date in textbox
                            txtDate.setText(dayOfMonth + "-"
                                    + (monthOfYear + 1) + "-" + year);

                        }
                    }, mYear, mMonth, mDay);
            dpd.show();


  }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top