diff --git a/app/src/main/java/net/micode/notes/ui/DateTimePicker.java b/app/src/main/java/net/micode/notes/ui/DateTimePicker.java index 496b0cd..182690a 100644 --- a/app/src/main/java/net/micode/notes/ui/DateTimePicker.java +++ b/app/src/main/java/net/micode/notes/ui/DateTimePicker.java @@ -28,10 +28,18 @@ import android.view.View; import android.widget.FrameLayout; import android.widget.NumberPicker; +/** + * 日期选择器,是 [FrameLayout] 的子类 + */ public class DateTimePicker extends FrameLayout { private static final boolean DEFAULT_ENABLE_STATE = true; + /** + * 常量声明,包含一些数值范围等 + * 例如小时可选范围为0~23小时 + * 分钟可选范围为0~59分钟 + */ private static final int HOURS_IN_HALF_DAY = 12; private static final int HOURS_IN_ALL_DAY = 24; private static final int DAYS_IN_ALL_WEEK = 7; @@ -46,25 +54,59 @@ public class DateTimePicker extends FrameLayout { private static final int AMPM_SPINNER_MIN_VAL = 0; private static final int AMPM_SPINNER_MAX_VAL = 1; + /** + * 天数选择器 + */ private final NumberPicker mDateSpinner; + /** + * 时间选择器 + */ private final NumberPicker mHourSpinner; + /** + * 分钟选择器 + */ private final NumberPicker mMinuteSpinner; + /** + * AM / PM 早晚选择器 + */ private final NumberPicker mAmPmSpinner; + /** + * 日期实例对象 + */ private Calendar mDate; - + /** + * 日期显示的数值 + */ private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; - + /** + * 是否是早晨 + */ private boolean mIsAm; - + /** + * 是否是24小时制 + */ private boolean mIs24HourView; - + /** + * 是否启用 + */ private boolean mIsEnabled = DEFAULT_ENABLE_STATE; - + /** + * 是否正在初始化中 + */ private boolean mInitialising; - + /** + * 日期变更监听器 + */ private OnDateTimeChangedListener mOnDateTimeChangedListener; - - private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() { + /** + * 数值改变监听器 + * + * 在数值更改时同步修改 mDate 的数值 + * 并刷新选择器的数值 + * 触发时间改变监听器 + */ + private NumberPicker.OnValueChangeListener mOnDateChangedListener = + new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal); @@ -72,8 +114,13 @@ public class DateTimePicker extends FrameLayout { onDateTimeChanged(); } }; - - private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() { + /** + * 数值改变监听器 + * + * 在数值改变时传入选择器对象和操作前与操作后的数值 + * 对数值进行具体的分析 + */ + private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener(){ @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { boolean isDateChanged = false; @@ -114,7 +161,9 @@ public class DateTimePicker extends FrameLayout { } } }; - + /** + * 分钟改变监听器 + */ private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { @@ -143,7 +192,10 @@ public class DateTimePicker extends FrameLayout { onDateTimeChanged(); } }; - + /** + * 早晚变更的监听器 + * 在选择AM / PM的时候通知监听器触发方法 + */ private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { @@ -185,7 +237,7 @@ public class DateTimePicker extends FrameLayout { mHourSpinner = (NumberPicker) findViewById(R.id.hour); mHourSpinner.setOnValueChangedListener(mOnHourChangedListener); - mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); + mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL); mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL); mMinuteSpinner.setOnLongPressUpdateInterval(100); @@ -475,11 +527,19 @@ public class DateTimePicker extends FrameLayout { public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { mOnDateTimeChangedListener = callback; } - + /** + * 在日期时间改变时调用该方法 + * 如果日期时间改变监听器为空则不处理 + * 不为空则调用监听器的方法 + */ private void onDateTimeChanged() { - if (mOnDateTimeChangedListener != null) { - mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), - getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); - } + if (mOnDateTimeChangedListener == null) return; + mOnDateTimeChangedListener.onDateTimeChanged(this, + getCurrentYear(), + getCurrentMonth(), + getCurrentDay(), + getCurrentHourOfDay(), + getCurrentMinute() + ); } }