Android CalendarView показывает неправильный месяц при прокрутке, когда мы устанавливаем максимальную дату

Я добавил setMinDate (1 декабря 2015 г.) и setMaxDate (текущий месяц, последний день) для просмотра календаря, при переходе от минимальной даты к максимальной дате отображается предыдущий месяц (по умолчанию отображается декабрь, когда я прокручиваю до минимальной даты из максимальная дата, затем минимальная дата до максимальной даты, наконец, отображается ноябрь). и как удалить нецелевые дни месяца из календаря, может ли кто-нибудь предложить мне

Вот мой код

public void showCalendar() {

        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(ctx);
        LayoutInflater inflater = ((Activity) ctx).getLayoutInflater();
        final View dialogView = inflater.inflate(R.layout.calendar_view_layout,
                null);

        CalendarView calendar = (CalendarView) dialogView
                .findViewById(R.id.calendarView);

        Button cancelBtn = (Button) dialogView.findViewById(R.id.cancel);
        Button okBtn = (Button) dialogView.findViewById(R.id.ok);

        // sets whether to show the week number.
        calendar.setShowWeekNumber(false);

        // sets the first day of week according to Calendar.
        // here we set Monday as the first day of the Calendar
        calendar.setFirstDayOfWeek(2);
        calendar.setBackgroundColor(Color.WHITE);
        calendar.setFocusedMonthDateColor(Color.BLACK);




        /* calendar.setMinDate(); */
        calendar.setMaxDate(System.currentTimeMillis());

        // The background color for the selected week.
        calendar.setSelectedWeekBackgroundColor(Color.TRANSPARENT);

        // sets the color for the dates of an unfocused month.
        calendar.setUnfocusedMonthDateColor(Color.BLACK);

        // sets the color for the separator line between weeks.
        calendar.setWeekSeparatorLineColor(getResources().getColor(
                R.color.transparent));

        // sets the color for the vertical bar shown at the beginning and at the
        // end of the selected date.
        // calendar.setSelectedDateVerticalBar(Color.GREEN);

        // sets the listener to be notified upon selected date change.
        calendar.setOnDateChangeListener(new OnDateChangeListener() {
            // show the selected date as a toast
            @Override
            public void onSelectedDayChange(CalendarView view, int year,
                    int month, int day) {

                currentMonth = month;
                currentDay = day;
                currentYear = year;

                /*
                 * Toast.makeText(getActivity(), day + "/" + (month + 1) + "/" +
                 * year, Toast.LENGTH_LONG) .show();
                 */
            }
        });

        getCurrentMonth(calendar);

        dialogBuilder.setView(dialogView);
        final AlertDialog b = dialogBuilder.create();
        b.getWindow().setBackgroundDrawable(
                new ColorDrawable(android.graphics.Color.TRANSPARENT));
        b.show();

    }

    void getCurrentMonth(CalendarView calendarView) {

        Date today = new Date();

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(today);

        calendar.add(Calendar.MONTH, 1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.DATE, -1);

        Date lastDayOfMonth = calendar.getTime();

        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        long maxDate = lastDayOfMonth.getTime();
        calendarView.setMaxDate(maxDate);
        String[] monthLastDay = sdf.format(lastDayOfMonth).split("-");

        int year = Integer.parseInt(monthLastDay[0]) - 1;

        String lastYearFirstDate = year + "-" + monthLastDay[1] + "-" + 01;

        try {
            long minDate = sdf.parse(lastYearFirstDate).getTime();
            calendarView.setMinDate(minDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

person srinu    schedule 28.12.2016    source источник


Ответы (1)


Посмотрите здесь. Месяцы начинаются с 0, поэтому 0 = январь, 11 = декабрь. Второй вопрос неясен, объясните его лучше, пожалуйста, несколько примеров было бы хорошо

person Luca Nicoletti    schedule 28.12.2016
comment
Только что добавила visibleWeekCount(5), теперь показывает правильно - person srinu; 28.12.2016