Files
yusheng-android/BaseModule/src/main/java/com/xscm/moduleutil/utils/DateSelectDialog.java

209 lines
6.4 KiB
Java
Raw Normal View History

2025-10-20 10:16:44 +08:00
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();
2025-11-05 11:08:00 +08:00
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);
2025-10-20 10:16:44 +08:00
}
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) {
2025-11-05 11:08:00 +08:00
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;
2025-10-20 10:16:44 +08:00
}
2025-11-05 11:08:00 +08:00
2025-10-20 10:16:44 +08:00
List<DateBean> dayList = new ArrayList<>();
2025-11-05 11:08:00 +08:00
for (int i = 1; i <= dayLimit; i++) {
2025-10-20 10:16:44 +08:00
if (i <= 9) {
dayList.add(new DateBean("0" + i, i));
} else {
dayList.add(new DateBean(String.valueOf(i), i));
}
}
2025-11-05 11:08:00 +08:00
2025-10-20 10:16:44 +08:00
return dayList;
}
private List<DateBean> getMonth(int year) {
2025-11-05 11:08:00 +08:00
List<DateBean> monthList = new ArrayList<>();
int currentYear = TimeUtils.getYear();
int currentMonth = TimeUtils.getMonth();
int monthLimit = 12;
// 如果是最大年份16年前则月份不能超过当前月份
if (year == currentYear - 16) {
monthLimit = currentMonth;
2025-10-20 10:16:44 +08:00
}
2025-11-05 11:08:00 +08:00
for (int i = 1; i <= monthLimit; i++) {
2025-10-20 10:16:44 +08:00
if (i <= 9) {
2025-11-05 11:08:00 +08:00
monthList.add(new DateBean("0" + i, i));
2025-10-20 10:16:44 +08:00
} else {
2025-11-05 11:08:00 +08:00
monthList.add(new DateBean(String.valueOf(i), i));
2025-10-20 10:16:44 +08:00
}
}
2025-11-05 11:08:00 +08:00
return monthList;
2025-10-20 10:16:44 +08:00
}
private List<DateBean> getYear() {
2025-11-05 11:08:00 +08:00
int currentYear = TimeUtils.getYear();
int minYear = currentYear - 100; // 最小年份设为100年前
int maxYear = currentYear - 16; // 最大年份设为16年前
2025-10-20 10:16:44 +08:00
List<DateBean> yearList = new ArrayList<>();
2025-11-05 11:08:00 +08:00
for (int i = minYear; i <= maxYear; i++) {
2025-10-20 10:16:44 +08:00
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);
}
}