66152932765c0136f91b759499328675f44c2c8c.svn-base 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package com.hjq.dialog;
  2. import android.app.Dialog;
  3. import android.support.v4.app.FragmentActivity;
  4. import com.hjq.dialog.widget.LoopView;
  5. import java.util.ArrayList;
  6. import java.util.Calendar;
  7. import java.util.Locale;
  8. /**
  9. * desc : 日期选择对话框
  10. */
  11. public final class DateDialog extends AbsLooperDialog {
  12. private static final int START_YEAR = 2012;
  13. private static final int EDN_YEAR = 2022;
  14. public static final class Builder
  15. extends AbsLooperDialog.Builder<Builder>
  16. implements LoopView.LoopScrollListener {
  17. private LoopView mYearView;
  18. private LoopView mMonthView;
  19. private LoopView mDayView;
  20. private OnListener mListener;
  21. public Builder(FragmentActivity activity) {
  22. super(activity);
  23. // 生产年份
  24. ArrayList<String> yearList = new ArrayList<>(10);
  25. for (int i = START_YEAR; i <= EDN_YEAR; i++) {
  26. yearList.add(i + " " + getText(R.string.dialog_date_year));
  27. }
  28. // 生产月份
  29. ArrayList<String> monthList = new ArrayList<>(12);
  30. for (int i = 1; i <= 12; i++) {
  31. monthList.add(i + " " + getText(R.string.dialog_date_month));
  32. }
  33. mYearView = createLoopView();
  34. mMonthView = createLoopView();
  35. mDayView = createLoopView();
  36. mYearView.setData(yearList);
  37. mMonthView.setData(monthList);
  38. mYearView.setLoopListener(this);
  39. mMonthView.setLoopListener(this);
  40. Calendar calendar = Calendar.getInstance();
  41. mYearView.setInitPosition(calendar.get(Calendar.YEAR) - START_YEAR);
  42. mMonthView.setInitPosition(calendar.get(Calendar.MONTH));
  43. mDayView.setInitPosition(calendar.get(Calendar.DAY_OF_MONTH) - 1);
  44. }
  45. @Override
  46. public void onItemSelect(LoopView loopView, int position) {
  47. // 获取这个月最多有多少天
  48. Calendar calendar = Calendar.getInstance(Locale.CHINA);
  49. if (loopView == mYearView) {
  50. calendar.set(START_YEAR + mYearView.getSelectedItem(), mMonthView.getSelectedItem(), 1);
  51. }else if (loopView == mMonthView) {
  52. calendar.set(START_YEAR + mYearView.getSelectedItem(), mMonthView.getSelectedItem(), 1);
  53. }
  54. int day = calendar.getActualMaximum(Calendar.DATE);
  55. ArrayList<String> dayList = new ArrayList<>(day);
  56. for (int i = 1; i <= day; i++) {
  57. dayList.add(i + " " + getText(R.string.dialog_date_day));
  58. }
  59. mDayView.setData(dayList);
  60. }
  61. public Builder setListener(OnListener l) {
  62. mListener = l;
  63. return this;
  64. }
  65. @Override
  66. protected void onConfirm() {
  67. if (mListener != null) {
  68. mListener.onSelected(getDialog(), START_YEAR + mYearView.getSelectedItem(),
  69. mMonthView.getSelectedItem() + 1, mDayView.getSelectedItem() + 1);
  70. }
  71. dismiss();
  72. }
  73. protected void onCancel() {
  74. if (mListener != null) {
  75. mListener.onCancel(getDialog());
  76. }
  77. dismiss();
  78. }
  79. }
  80. public interface OnListener {
  81. /**
  82. * 选择完日期后回调
  83. *
  84. * @param year 年
  85. * @param month 月
  86. * @param day 日
  87. */
  88. void onSelected(Dialog dialog, int year, int month, int day);
  89. /**
  90. * 点击取消时回调
  91. */
  92. void onCancel(Dialog dialog);
  93. }
  94. }