Bigkoo / Android-PickerView

This is a picker view for android , support linkage effect, timepicker and optionspicker.(时间选择器、省市区三级联动)
Apache License 2.0
13.45k stars 3.45k forks source link

setRangDate在农历下失效 #884

Closed ftevxk closed 4 years ago

ftevxk commented 4 years ago

setRangDate设置结束日期在今天,使用TimePickerView切换农历月份是12个月没有被限制

DontOpenYellowGun commented 4 years ago

setRangDate设置结束日期在今天,使用TimePickerView切换农历月份是12个月没有被限制

请问你这边解决了吗?我现在也遇到同样的问题,自己改农历这块好像挺复杂

ftevxk commented 4 years ago

@

setRangDate设置结束日期在今天,使用TimePickerView切换农历月份是12个月没有被限制

请问你这边解决了吗?我现在也遇到同样的问题,自己改农历这块好像挺复杂

我把源码弄下来改了 0698DA9C-7163-4b19-8C55-70512E2C01A6 D461566B-4334-485d-BC98-DA2918253EEA 这两处,注释掉的是原代码

DontOpenYellowGun commented 4 years ago

@

setRangDate设置结束日期在今天,使用TimePickerView切换农历月份是12个月没有被限制

请问你这边解决了吗?我现在也遇到同样的问题,自己改农历这块好像挺复杂

我把源码弄下来改了 0698DA9C-7163-4b19-8C55-70512E2C01A6 D461566B-4334-485d-BC98-DA2918253EEA 这两处,注释掉的是原代码

只改这两个地方还差得很远啊 初始化setLunar的时候 年月日都要做对应限制 年月日变化的时候也要联动限制 不过还是非常感谢你!!!

ftevxk commented 4 years ago

@

setRangDate设置结束日期在今天,使用TimePickerView切换农历月份是12个月没有被限制

请问你这边解决了吗?我现在也遇到同样的问题,自己改农历这块好像挺复杂

我把源码弄下来改了 0698DA9C-7163-4b19-8C55-70512E2C01A6 D461566B-4334-485d-BC98-DA2918253EEA 这两处,注释掉的是原代码

只改这两个地方还差得很远啊 初始化setLunar的时候 年月日都要做对应限制 年月日变化的时候也要联动限制 不过还是非常感谢你!!!

主要是在切换农历时有重新设置一下adapter,目前项目只要求限制到今天就直接魔改项目代码了,你可以大概参考一下思路 5A9414D9-479C-458b-B1BA-7B0123A2E59D

private static void setSolarAdapter(WheelView yearWheel, WheelView monthWheel, WheelView dayWheel, WheelView hourWheel) {
        hourWheel.setAdapter(new NumericWheelAdapter(0, 23) {
            Calendar cal = Calendar.getInstance();

            @Override
            public int getItemsCount() {
                if (yearWheel.getCurrentItem() == yearWheel.getItemsCount() - 1) {
                    return cal.get(Calendar.HOUR_OF_DAY);
                } else {
                    return super.getItemsCount();
                }
            }
        });
    }

    private static void setLunarAdapter(WheelView yearWheel, WheelView monthWheel, WheelView dayWheel, WheelView hourWheel) {
        Calendar cal = Calendar.getInstance();
        //只有在今年才需要限定最大月日
        int[] lunar = LunarCalendar.solarToLunar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH));
        int lunarYear = lunar[0];
        int lunarMonth = lunar[1] - 1;
        int lunarDay = lunar[2];
        int leapMonth = ChinaDate.leapMonth(lunarYear);
        boolean isLeap = lunar[3] == 1;

        yearWheel.setOnItemSelectedListener(index -> {
            if (index == yearWheel.getItemsCount() - 1) {
                monthWheel.setCurrentItem(0);
                dayWheel.setCurrentItem(0);
                hourWheel.setCurrentItem(0);
            }
            setLunarAdapter(yearWheel, monthWheel, dayWheel, hourWheel);
        });

        //限定农历月份最大只能选到当月
        List<String> monthList;
        if (leapMonth != 0 && (lunarMonth > leapMonth - 1 || isLeap)) {
            //选中月是闰月或大于闰月
            if (yearWheel.getCurrentItem() == yearWheel.getItemsCount() - 1) {
                monthList = ChinaDate.getMonths(lunarYear).subList(0, lunarMonth + 2);
            } else {
                monthList = ChinaDate.getMonths(lunarYear);
            }
        } else {
            if (yearWheel.getCurrentItem() == yearWheel.getItemsCount() - 1) {
                monthList = ChinaDate.getMonths(lunarYear).subList(0, lunarMonth + 1);
            } else {
                monthList = ChinaDate.getMonths(lunarYear);
            }
        }
        monthWheel.setAdapter(new ArrayWheelAdapter(monthList));

        //限定农历天数最大只能选到今天
        List<String> dayList;
        if (ChinaDate.leapMonth(lunarYear) == 0) {
            if (yearWheel.getCurrentItem() == yearWheel.getItemsCount() - 1) {
                monthWheel.onItemSelected();
                dayList = ChinaDate.getLunarDays(ChinaDate.monthDays(lunarYear, leapMonth)).subList(0, lunarDay - 1);
            } else {
                dayList = ChinaDate.getLunarDays(ChinaDate.monthDays(lunarYear, leapMonth));
            }
        } else {
            //闰年
            if (yearWheel.getCurrentItem() == yearWheel.getItemsCount() - 1) {
                monthWheel.onItemSelected();
                dayList = ChinaDate.getLunarDays(ChinaDate.leapDays(lunarYear)).subList(0, lunarDay - 1);
            } else {
                dayList = ChinaDate.getLunarDays(ChinaDate.leapDays(lunarYear));
            }
        }
        dayWheel.setAdapter(new ArrayWheelAdapter(dayList));
    }