Day89: Tomorrow is check day

作者在博客中描述了自己在毕业设计过程中遇到的问题,特别是由于拖延导致的时间管理困难。原本简单的任务因为一再拖延而变得复杂,作者意识到即使任务简单也需要合理安排时间,并决定立即开始着手解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   Time flew so fast that there was one day left for me to check my progress towards Graduation Design.

   But sadly, nothing had been done since last Thurday.I decided to finish my task during last weekend,but finally I wasted all my time on playing game. In the working days, I came back at night and did some English reading for CET6. I didn't do much but it usually cost me the whole free night, left me no more time or heart for searching material about software cracking and protecting.

   Why can't I finnish these work earlier before time to submit? This kind of trouble excused me a lot of time.Though a very easy task which won't take me much time, it is not allowed to waste so much time without leaving any reserved time for incidents, anyhow I'm faced with such a big and difficult challenge!

  No more words, just to do.


2016.12.6 Tuesday

public class CalendarViewAdapter extends BaseAdapter { private static final String TAG = "MenuSpinnerAdapter"; private final String mButtonNames []; // Text on buttons // Used to define the look of the menu button according to the current view: // Day view: show day of the week + full date underneath // Week view: show the month + year // Month view: show the month + year // Agenda view: show day of the week + full date underneath private int mCurrentMainView; private final LayoutInflater mInflater; // Defines the types of view returned by this spinner private static final int BUTTON_VIEW_TYPE = 0; static final int VIEW_TYPE_NUM = 1; // Increase this if you add more view types public static final int DAY_BUTTON_INDEX = 0; public static final int WEEK_BUTTON_INDEX = 1; public static final int MONTH_BUTTON_INDEX = 2; public static final int AGENDA_BUTTON_INDEX = 3; // The current selected event's time, used to calculate the date and day of the week // for the buttons. private long mMilliTime; private String mTimeZone; private long mTodayJulianDay; private final Context mContext; private final Formatter mFormatter; private final StringBuilder mStringBuilder; private Handler mMidnightHandler = null; // Used to run a time update every midnight private final boolean mShowDate; // Spinner mode indicator (view name or view name with date) // Updates time specific variables (time-zone, today's Julian day). private final Runnable mTimeUpdater = new Runnable() { @Override public void run() { refresh(mContext); } }; public CalendarViewAdapter(Context context, int viewType, boolean showDate) { super(); mMidnightHandler = new Handler(); mCurrentMainView = viewType; mContext = context; mShowDate = showDate; // Initialize mButtonNames = context.getResources().getStringArray(R.array.buttons_list); mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mStringBuilder = new StringBuilder(50); mFormatter = new Formatter(mStringBuilder, Locale.getDefault()); // Sets time specific variables and starts a thread for midnight updates if (showDate) { refresh(context); } } // Sets the time zone and today's Julian day to be used by the adapter. // Also, notify listener on the change and resets the midnight update thread. public void refresh(Context context) { mTimeZone = Utils.getTimeZone(context, mTimeUpdater); Time time = new Time(mTimeZone); long now = System.currentTimeMillis(); time.set(now); mTodayJulianDay = Time.getJulianDay(now, time.gmtoff); notifyDataSetChanged(); setMidnightHandler(); } // Sets a thread to run 1 second after midnight and update the current date // This is used to display correctly the date of yesterday/today/tomorrow private void setMidnightHandler() { mMidnightHandler.removeCallbacks(mTimeUpdater); // Set the time updater to run at 1 second after midnight long now = System.currentTimeMillis(); Time time = new Time(mTimeZone); time.set(now); long runInMillis = (24 * 3600 - time.hour * 3600 - time.minute * 60 - time.second + 1) * 1000; mMidnightHandler.postDelayed(mTimeUpdater, runInMillis); } // Stops the midnight update thread, called by the activity when it is paused. public void onPause() { mMidnightHandler.removeCallbacks(mTimeUpdater); } // Returns the amount of buttons in the menu @Override public int getCount() { return mButtonNames.length; } @Override public Object getItem(int position) { if (position < mButtonNames.length) { return mButtonNames[position]; } return null; } @Override public long getItemId(int position) { // Item ID is its location in the list return position; } @Override public boolean hasStableIds() { return false; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v; if (mShowDate) { // Check if can recycle the view if (convertView == null || ((Integer) convertView.getTag()).intValue() != R.layout.actionbar_pulldown_menu_top_button) { v = mInflater.inflate(R.layout.actionbar_pulldown_menu_top_button, parent, false); // Set the tag to make sure you can recycle it when you get it // as a convert view v.setTag(new Integer(R.layout.actionbar_pulldown_menu_top_button)); } else { v = convertView; } TextView weekDay = (TextView) v.findViewById(R.id.top_button_weekday); TextView date = (TextView) v.findViewById(R.id.top_button_date); switch (mCurrentMainView) { case ViewType.DAY: weekDay.setVisibility(View.VISIBLE); weekDay.setText(buildDayOfWeek()); date.setText(buildFullDate()); break; case ViewType.WEEK: if (Utils.getShowWeekNumber(mContext)) { weekDay.setVisibility(View.VISIBLE); weekDay.setText(buildWeekNum()); } else { weekDay.setVisibility(View.GONE); } date.setText(buildMonthYearDate()); break; case ViewType.MONTH: weekDay.setVisibility(View.GONE); date.setText(buildMonthYearDate()); break; case ViewType.AGENDA: weekDay.setVisibility(View.VISIBLE); weekDay.setText(buildDayOfWeek()); date.setText(buildFullDate()); break; default: v = null; break; } } else { if (convertView == null || ((Integer) convertView.getTag()).intValue() != R.layout.actionbar_pulldown_menu_top_button_no_date) { v = mInflater.inflate( R.layout.actionbar_pulldown_menu_top_button_no_date, parent, false); // Set the tag to make sure you can recycle it when you get it // as a convert view v.setTag(new Integer(R.layout.actionbar_pulldown_menu_top_button_no_date)); } else { v = convertView; } TextView title = (TextView) v; switch (mCurrentMainView) { case ViewType.DAY: title.setText(mButtonNames [DAY_BUTTON_INDEX]); break; case ViewType.WEEK: title.setText(mButtonNames [WEEK_BUTTON_INDEX]); break; case ViewType.MONTH: title.setText(mButtonNames [MONTH_BUTTON_INDEX]); break; case ViewType.AGENDA: title.setText(mButtonNames [AGENDA_BUTTON_INDEX]); break; default: v = null; break; } } return v; } @Override public int getItemViewType(int position) { // Only one kind of view is used return BUTTON_VIEW_TYPE; } @Override public int getViewTypeCount() { return VIEW_TYPE_NUM; } @Override public boolean isEmpty() { return (mButtonNames.length == 0); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View v = mInflater.inflate(R.layout.actionbar_pulldown_menu_button, parent, false); TextView viewType = (TextView)v.findViewById(R.id.button_view); TextView date = (TextView)v.findViewById(R.id.button_date); switch (position) { case DAY_BUTTON_INDEX: viewType.setText(mButtonNames [DAY_BUTTON_INDEX]); if (mShowDate) { date.setText(buildMonthDayDate()); } break; case WEEK_BUTTON_INDEX: viewType.setText(mButtonNames [WEEK_BUTTON_INDEX]); if (mShowDate) { date.setText(buildWeekDate()); } break; case MONTH_BUTTON_INDEX: viewType.setText(mButtonNames [MONTH_BUTTON_INDEX]); if (mShowDate) { date.setText(buildMonthDate()); } break; case AGENDA_BUTTON_INDEX: viewType.setText(mButtonNames [AGENDA_BUTTON_INDEX]); if (mShowDate) { date.setText(buildMonthDayDate()); } break; default: v = convertView; break; } return v; } // Updates the current viewType // Used to match the label on the menu button with the calendar view public void setMainView(int viewType) { mCurrentMainView = viewType; notifyDataSetChanged(); } // Update the date that is displayed on buttons // Used when the user selects a new day/week/month to watch public void setTime(long time) { mMilliTime = time; notifyDataSetChanged(); } // Builds a string with the day of the week and the word yesterday/today/tomorrow // before it if applicable. private String buildDayOfWeek() { Time t = new Time(mTimeZone); t.set(mMilliTime); long julianDay = Time.getJulianDay(mMilliTime,t.gmtoff); String dayOfWeek = null; mStringBuilder.setLength(0); if (julianDay == mTodayJulianDay) { dayOfWeek = mContext.getString(R.string.agenda_today, DateUtils.formatDateRange(mContext, mFormatter, mMilliTime, mMilliTime, DateUtils.FORMAT_SHOW_WEEKDAY, mTimeZone).toString()); } else if (julianDay == mTodayJulianDay - 1) { dayOfWeek = mContext.getString(R.string.agenda_yesterday, DateUtils.formatDateRange(mContext, mFormatter, mMilliTime, mMilliTime, DateUtils.FORMAT_SHOW_WEEKDAY, mTimeZone).toString()); } else if (julianDay == mTodayJulianDay + 1) { dayOfWeek = mContext.getString(R.string.agenda_tomorrow, DateUtils.formatDateRange(mContext, mFormatter, mMilliTime, mMilliTime, DateUtils.FORMAT_SHOW_WEEKDAY, mTimeZone).toString()); } else { dayOfWeek = DateUtils.formatDateRange(mContext, mFormatter, mMilliTime, mMilliTime, DateUtils.FORMAT_SHOW_WEEKDAY, mTimeZone).toString(); } return dayOfWeek.toUpperCase(); } // Builds strings with different formats: // Full date: Month,day Year // Month year // Month day // Month // Week: month day-day or month day - month day private String buildFullDate() { mStringBuilder.setLength(0); String date = DateUtils.formatDateRange(mContext, mFormatter, mMilliTime, mMilliTime, DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR, mTimeZone).toString(); return date; } private String buildMonthYearDate() { mStringBuilder.setLength(0); String date = DateUtils.formatDateRange( mContext, mFormatter, mMilliTime, mMilliTime, DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_MONTH_DAY | DateUtils.FORMAT_SHOW_YEAR, mTimeZone).toString(); return date; } private String buildMonthDayDate() { mStringBuilder.setLength(0); String date = DateUtils.formatDateRange(mContext, mFormatter, mMilliTime, mMilliTime, DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_YEAR, mTimeZone).toString(); return date; } private String buildMonthDate() { mStringBuilder.setLength(0); String date = DateUtils.formatDateRange( mContext, mFormatter, mMilliTime, mMilliTime, DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_YEAR | DateUtils.FORMAT_NO_MONTH_DAY, mTimeZone).toString(); return date; } private String buildWeekDate() { // Calculate the start of the week, taking into account the "first day of the week" // setting. Time t = new Time(mTimeZone); t.set(mMilliTime); int firstDayOfWeek = Utils.getFirstDayOfWeek(mContext); int dayOfWeek = t.weekDay; int diff = dayOfWeek - firstDayOfWeek; if (diff != 0) { if (diff < 0) { diff += 7; } t.monthDay -= diff; t.normalize(true /* ignore isDst */); } long weekStartTime = t.toMillis(true); // The end of the week is 6 days after the start of the week long weekEndTime = weekStartTime + DateUtils.WEEK_IN_MILLIS - DateUtils.DAY_IN_MILLIS; // If week start and end is in 2 different months, use short months names Time t1 = new Time(mTimeZone); t.set(weekEndTime); int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_YEAR; if (t.month != t1.month) { flags |= DateUtils.FORMAT_ABBREV_MONTH; } mStringBuilder.setLength(0); String date = DateUtils.formatDateRange(mContext, mFormatter, weekStartTime, weekEndTime, flags, mTimeZone).toString(); return date; } private String buildWeekNum() { int week = Utils.getWeekNumberFromTime(mMilliTime, mContext); return mContext.getResources().getQuantityString(R.plurals.weekN, week, week); } }为什么top_button_date的初始值被设为January 2010
最新发布
08-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值