Files
yusheng-android/BaseModule/src/main/java/com/xscm/moduleutil/utils/DateSelectDialog.java
2025-11-07 09:22:39 +08:00

209 lines
6.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<MeDialogDateSelectBinding> {
private int year = 0;
private int month = 0;
private OnSelectDate mOnSelectDate;
private List<DateBean> yearList;
private List<DateBean> monthList;
private List<DateBean> 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<DateBean>() {
@Override
public void onItemSelected(DateBean item) {
}
});
mBinding.pickerViewDay.notifyDataSetChanged();
}
private void setMonth(int year) {
monthList = getMonth(year);
mBinding.pickerViewMonth.setItems(monthList, new PickerView.OnItemSelectedListener<DateBean>() {
@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<DateBean>() {
@Override
public void onItemSelected(DateBean item) {
year = item.getDate();
setMonth(year);
}
});
mBinding.pickerViewYear.notifyDataSetChanged();
}
private List<DateBean> 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<DateBean> 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<DateBean> getMonth(int year) {
List<DateBean> 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<DateBean> getYear() {
int currentYear = TimeUtils.getYear();
int minYear = currentYear - 100; // 最小年份设为100年前
int maxYear = currentYear - 16; // 最大年份设为16年前
List<DateBean> 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);
}
}