【问题标题】:How can I enable only specific days in datepicker Android?如何在 datepicker Android 中仅启用特定日期?
【发布时间】:2020-04-05 21:03:19
【问题描述】:

基本上我是在做预约申请。所以我在列表中显示日期,当用户选择任何一天时,日期选择器会弹出并仅显示启用 3,4 周的相应日期。例如,如果我选择星期一,则启用本月的所有星期一。 7、14、21、28

【问题讨论】:

标签: java android


【解决方案1】:

当你描述 onPickerListener
像这样的

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

在 onDateSet 中描述和处理您的特殊日子
恕我直言

【讨论】:

【解决方案2】:

您可以使用MaterialDateTimeOPicker

在此列表中传递作为选择器可接受日期的值。


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)

【讨论】:

    【解决方案3】:

    昨天,我发布了一个问题,询问 如何在 DatePicker Android 中仅启用特定日期。就像每当用户单击特定日期时,DatePicker 中只会提供相应的日期?。我已经解决了,在这里分享一下:

    这里是当用户点击星期一然后 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");
                    }
    

    【讨论】:

    • 您可以将此 sn-p 简化为 datePickerDialog.setSelectableDays(calendars),其余代码无法回答问题。问题是原生DatePickerDialog 没有这样的方法。可能,你使用了一些库,你应该提到这一点。
    猜你喜欢
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2011-12-04
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多