В календаре после отключения определенных дат далее выбираемая дата как минимальная дата - PullRequest
1 голос
/ 26 сентября 2019

Я использую эту библиотеку Календаря https://github.com/wdullaer/MaterialDateTimePicker, чтобы отключить определенные дни, скажем, все субботы и воскресенья, я достиг их, используя приведенный ниже код

 private fun showDatePicker() {

    val workOffDaysList = Prefs.with(this).getStringSet(WSKey.WORK_OFF, null)
    val holidaysList = Prefs.with(this).getStringSet(WSKey.HOLIDAYS, null)



    var calendar = Calendar.getInstance()
    var date: Date? = null
    dpd = DatePickerDialog.newInstance(
            this,
            calendar.get(Calendar.YEAR),
            calendar.get(Calendar.MONTH),
            calendar.get(Calendar.DAY_OF_MONTH)
    )



    dpd!!.accentColor = ContextCompat.getColor(this@CommonHoldDetailActivity, R.color.mdtp_accent_color)
    val sdf = SimpleDateFormat(this.resources.getString(R.string.date_format), Locale.US)


    for (s in holidaysList) {
        try {
            date = sdf.parse(s)
        } catch (e: ParseException) {
            e.printStackTrace()
        }

        calendar = dateToCalendar(date)
        println(calendar.time)


        val dates = ArrayList<Calendar>()

        dates.add(calendar)
        val disabledDays1 = dates.toTypedArray()
        dpd!!.disabledDays = disabledDays1


    }


    var calendarDays: Calendar

    val weekends = ArrayList<Calendar>()
    val weeks = 366



    for (s in workOffDaysList) {

        when {
            s.equals("0", ignoreCase = true) -> {
                var i = 0
                while (i < weeks * 7) {
                    calendarDays = Calendar.getInstance()
                    calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.SUNDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
                    weekends.add(calendarDays)
                    i += 7
                }
                val disabledDays = weekends.toTypedArray()
                dpd!!.disabledDays = disabledDays
            }
            s.equals("1", ignoreCase = true) -> {
                var i = 0
                while (i < weeks * 7) {
                    calendarDays = Calendar.getInstance()
                    calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.MONDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
                    weekends.add(calendarDays)
                    i += 7
                }
                val disabledDays = weekends.toTypedArray()
                dpd!!.disabledDays = disabledDays
            }
            s.equals("2", ignoreCase = true) -> {
                var i = 0
                while (i < weeks * 7) {
                    calendarDays = Calendar.getInstance()
                    calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.TUESDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
                    weekends.add(calendarDays)
                    i += 7
                }
                val disabledDays = weekends.toTypedArray()
                dpd!!.disabledDays = disabledDays
            }
            s.equals("3", ignoreCase = true) -> {
                var i = 0
                while (i < weeks * 7) {
                    calendarDays = Calendar.getInstance()
                    calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.WEDNESDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
                    weekends.add(calendarDays)
                    i += 7
                }
                val disabledDays = weekends.toTypedArray()
                dpd!!.disabledDays = disabledDays
            }
            s.equals("4", ignoreCase = true) -> {
                var i = 0
                while (i < weeks * 7) {
                    calendarDays = Calendar.getInstance()
                    calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.THURSDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
                    weekends.add(calendarDays)
                    i += 7
                }
                val disabledDays = weekends.toTypedArray()
                dpd!!.disabledDays = disabledDays
            }
            s.equals("5", ignoreCase = true) -> {
                var i = 0
                while (i < weeks * 7) {
                    calendarDays = Calendar.getInstance()
                    calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.FRIDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
                    weekends.add(calendarDays)
                    i += 7
                }
                val disabledDays = weekends.toTypedArray()
                dpd!!.disabledDays = disabledDays
            }
            s.equals("6", ignoreCase = true) -> {
                var i = 0
                while (i < weeks * 7) {
                    calendarDays = Calendar.getInstance()
                    calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.SATURDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
                    weekends.add(calendarDays)
                    i += 7
                }
                val disabledDays = weekends.toTypedArray()
                dpd!!.disabledDays = disabledDays
            }
        }


    }


    dpd!!.minDate = todaysDate

    dpd!!.show(supportFragmentManager, "DatePickerDialog")


}



override fun onDateSet(view: DatePickerDialog?, year: Int, monthOfYear: Int, dayOfMonth: Int) {
    val date = year.toString() + "-" + (monthOfYear + 1) + "-" + dayOfMonth
          txtRecheduleDate!!.text = date
    dpd!!.dismiss()
}

Но проблема в том, что сегодня воскресеньеи если я установил minDate в качестве текущей даты, то он будет доступен для выбора.Но я должен показать следующую выбираемую дату, которая не попадает под «Отключенные даты».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...