简体   繁体   English

如何在日期选择器 Android 中仅启用特定日期?

[英]How can I enable only specific days in datepicker Android?

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.因此,我在列表中显示天数,当用户 select 任何一天时,日期选择器会弹出并仅显示启用 3.4 周的相应日期。 For example, if I select Monday then all the Mondays of this month enabled.例如,如果我 select 星期一,则启用本月的所有星期一。 7, 14, 21, 28 7、14、21、28

when you describe onPickerListener当你描述 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在 onDateSet 中描述和处理您的特殊日子
imho恕我直言

You can use MaterialDateTimeOPicker您可以使用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.昨天,我发布了一个问题,询问如何在 DatePicker Android 中仅启用特定日期。 Like whenever user click on specific day only those respective dates will available in DatePicker?就像每当用户单击特定日期时,DatePicker 中只有那些相应的日期可用? . . I have solved it, which I will share here:我已经解决了,我将在这里分享:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

Here are the screenshots that when user click on Monday then DatePicker pops up and enable only Mondays from that day.以下是当用户单击星期一时,DatePicker 会弹出并仅启用当天的星期一的屏幕截图。

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");
                }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM