209 lines
6.4 KiB
Java
209 lines
6.4 KiB
Java
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);
|
||
}
|
||
}
|