package com.xscm.moduleutil.utils; import android.content.Context; import android.view.View; import androidx.annotation.NonNull; import com.xscm.moduleutil.R; import com.xscm.moduleutil.bean.DateBean; import com.xscm.moduleutil.databinding.MeDialogDateSelectBinding; import com.xscm.moduleutil.widget.picker.PickerView; import java.util.ArrayList; import java.util.List; /** * 日期选择 */ public class DateSelectDialog extends BaseBottomSheetDialog { private int year = 0; private int month = 0; private OnSelectDate mOnSelectDate; private List yearList; private List monthList; private List dayList; public DateSelectDialog(@NonNull Context context) { super(context); } @Override public int getLayout() { return R.layout.me_dialog_date_select; } @Override public void initView() { this.setCancelable(false); this.setCanceledOnTouchOutside(false); mBinding.tvCancel.setOnClickListener(this::onClick); mBinding.tvConfirm.setOnClickListener(this::onClick); } @Override public void initData() { setYear(); int defaultYearPos = yearList.size() - 1; // 默认选中最新的年份(16年前) mBinding.pickerViewYear.setSelectedItemPosition(defaultYearPos); // 获取默认年份 int defaultYear = yearList.get(defaultYearPos).getDate(); setMonth(defaultYear); mBinding.pickerViewMonth.setSelectedItemPosition(0); setDay(defaultYear, 1); mBinding.pickerViewDay.setSelectedItemPosition(0); } public void setData(String y, String m, String d) { int yIndex = 0; for (int i = 0; i < yearList.size(); i++) { DateBean dateBean = yearList.get(i); if (dateBean.getText().equals(y)) { yIndex = i; } } mBinding.pickerViewYear.setSelectedItemPosition(yIndex); monthList = getMonth(Integer.parseInt(y)); int mIndex = 0; for (int i = 0; i < monthList.size(); i++) { DateBean dateBean = monthList.get(i); if (dateBean.getText().equals(m)) { mIndex = i; } } mBinding.pickerViewMonth.setSelectedItemPosition(mIndex); dayList = getDay(Integer.parseInt(y), Integer.parseInt(m)); int dIndex = 0; for (int i = 0; i < dayList.size(); i++) { DateBean dateBean = dayList.get(i); if (dateBean.getText().equals(d)) { dIndex = i; } } mBinding.pickerViewDay.setSelectedItemPosition(dIndex); } private void setDay(int year, int month) { dayList = getDay(year, month); mBinding.pickerViewDay.setItems(dayList, new PickerView.OnItemSelectedListener() { @Override public void onItemSelected(DateBean item) { } }); mBinding.pickerViewDay.notifyDataSetChanged(); } private void setMonth(int year) { monthList = getMonth(year); mBinding.pickerViewMonth.setItems(monthList, new PickerView.OnItemSelectedListener() { @Override public void onItemSelected(DateBean item) { month = item.getDate(); setDay(year, month); } }); mBinding.pickerViewMonth.notifyDataSetChanged(); } private void setYear() { yearList = getYear(); mBinding.pickerViewYear.setItems(yearList, new PickerView.OnItemSelectedListener() { @Override public void onItemSelected(DateBean item) { year = item.getDate(); setMonth(year); } }); mBinding.pickerViewYear.notifyDataSetChanged(); } private List getDay(int year, int month) { int dayLimit = TimeUtils.getDaysByYearMonth(year, month); int currentYear = TimeUtils.getYear(); int currentMonth = TimeUtils.getMonth(); int currentDay = TimeUtils.getDay(); // 如果是最大年份且是最大月份,则日期不能超过当前日期 if (year == currentYear - 16 && month == currentMonth) { dayLimit = currentDay; } List dayList = new ArrayList<>(); for (int i = 1; i <= dayLimit; i++) { if (i <= 9) { dayList.add(new DateBean("0" + i, i)); } else { dayList.add(new DateBean(String.valueOf(i), i)); } } return dayList; } private List getMonth(int year) { List monthList = new ArrayList<>(); int currentYear = TimeUtils.getYear(); int currentMonth = TimeUtils.getMonth(); int monthLimit = 12; // 如果是最大年份(16年前),则月份不能超过当前月份 if (year == currentYear - 16) { monthLimit = currentMonth; } for (int i = 1; i <= monthLimit; i++) { if (i <= 9) { monthList.add(new DateBean("0" + i, i)); } else { monthList.add(new DateBean(String.valueOf(i), i)); } } return monthList; } private List getYear() { int currentYear = TimeUtils.getYear(); int minYear = currentYear - 100; // 最小年份设为100年前 int maxYear = currentYear - 16; // 最大年份设为16年前 List yearList = new ArrayList<>(); for (int i = minYear; i <= maxYear; i++) { yearList.add(new DateBean(String.valueOf(i), i)); } return yearList; } public void onClick(View view) { dismiss(); if (view.getId() == R.id.tv_confirm) { if (mOnSelectDate != null) { DateBean year = mBinding.pickerViewYear.getSelectedItem(DateBean.class); DateBean month = mBinding.pickerViewMonth.getSelectedItem(DateBean.class); DateBean day = mBinding.pickerViewDay.getSelectedItem(DateBean.class); mOnSelectDate.selectDate(year.getText(), month.getText(), day.getText()); } } } public void setmOnSelectDate(OnSelectDate mOnSelectDate) { this.mOnSelectDate = mOnSelectDate; } public interface OnSelectDate { void selectDate(String year, String month, String day); } }