How can I enable only specific days in datepicker Android?

Viewed 1898

Basically I am making an appointment application. So I am showing days in a list, when user select any day then the datepicker pops up and shows only respective day date enabled 3,4 weeks. For example, if I select Monday then all the Mondays of this month enabled. 7, 14, 21, 28

3 Answers

when you describe onPickerListener
something like this

DatePickerDialog.OnDateSetListener d=new DatePickerDialog.OnDateSetListener() {
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        dateAndTime.set(Calendar.YEAR, year);
        dateAndTime.set(Calendar.MONTH, monthOfYear);
        dateAndTime.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        setInitialDateTime();
    }
};  

describe and process your special days inside onDateSet
imho

You can use MaterialDateTimeOPicker

Pass values in this list that are the acceptable dates for the picker.


Calendar now = Calendar.getInstance();
DatePickerDialog datePicker = DatePickerDialog.newInstance(
  MainActivity.this,
  now.get(Calendar.YEAR), // Initial year selection
  now.get(Calendar.MONTH), // Initial month selection
  now.get(Calendar.DAY_OF_MONTH) // Inital day selection
);

 datePicker.setSelectableDays(Calendar[] days)

Yesterday, I posted a question asking How can I enable only specific dates in DatePicker Android. Like whenever user click on specific day only those respective dates will available in DatePicker?. I have solved it, which I will share here:

enter image description here

enter image description here

enter image description here

Here are the screenshots that when user click on Monday then DatePicker pops up and enable only Mondays from that day.

code

@Override    
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Day day = days.get(position);
                    switch (day.getDay()){
                        case "Monday":
                            appDay = 2;
                            break;
                        case "Tuesday":
                            appDay = 3;
                            break;
                        case "Wednesday":
                            appDay = 4;
                            break;
                        case "Thursday":
                            appDay = 5;
                            break;
                        case "Friday":
                            appDay = 6;
                            break;
                        case "Saturday":
                            appDay = 7;
                            break;
                        case "Sunday":
                            appDay = 1;
                            break;
                        default:
                            appDay = 0;
                            break;
                    }
                    datePickerDialog = DatePickerDialog.newInstance(DayListFragment.this,Year, Month, Day);
                    datePickerDialog.setThemeDark(false);
                    datePickerDialog.setTitle("Select Appointment Date");
                    Calendar calendar1 = Calendar.getInstance();
                    int today = calendar1.get(Calendar.DAY_OF_WEEK);
                    if ( appDay == today)
                    {
                        int update = 0;
                        for (int i = 0; i < calendars.length; i++)
                        {
                            final Calendar calendar2 = Calendar.getInstance();
                            calendar2.get(Calendar.DAY_OF_WEEK);
                            calendar2.add(Calendar.DATE, update);
                            calendars[i] = calendar2;
                            update += 7;
                        }
                    }
                    else if ( appDay > today)
                    {
                        int for1 = appDay - today;
                        for (int i = 0; i < calendars.length; i++)
                        {
                            final Calendar calendar2 = Calendar.getInstance();
                            calendar2.get(Calendar.DAY_OF_WEEK);
                            calendar2.add(Calendar.DATE, for1);
                            calendars[i] = calendar2;
                            for1 += 7;
                        }
                    }
                    else if ( appDay < today)
                    {
                        int for2 = (7-today)+appDay;
                        for (int i = 0; i < calendars.length; i++)
                        {
                            final Calendar calendar2 = Calendar.getInstance();
                            calendar2.get(Calendar.DAY_OF_WEEK);
                            calendar2.add(Calendar.DATE, for2);
                            calendars[i] = calendar2;
                            for2 += 7;
                        }
                    }
                    datePickerDialog.setSelectableDays(calendars);
                    datePickerDialog.show(getFragmentManager(),"DatePickerDialog");
                }
Related