标签:定义 container 简单的 自己 对象 inf 老师 val for
以往上课之前都要去相册找到本学期的课表截图,不然容易记不住要上啥课,但是总是去相册找又太麻烦了。恰巧这学期开了Android的课程,于是结合所学以及在网上搜集的资料,就写了一个课表Android小程序。借鉴了这个博客的思路,但百分之九十朝上的代码都是自己写的,有兴趣的也可以去看看原博主的思路。
程序可以判断当前第几周,自动去除周次不在范围,以及单双周不匹配的课程。
在这里最重要的就是上课时间的这个属性,我们按照特定规则的字符串,以此来存放上课时间,这样再按照特定的算法解析它。这样尽管一周有多节课程名相同,但是单双周或教室不一样的课程也只需要用一个对象来封装他。
如下,计算机信息安全课程,一周有两次课,我们用;
分割不同上课时间的课程,然后再用:
分割具体的上课时间与地点
然后将课表分为3个水平Linear layout,周次、星期、上课时间。然后上课时间分为8个垂直Linearlayout。
简单的描述一下,详细的可以直接看源代码。
组件首先初始化一下,因为周次标题和星期标签是固定的,所以只要初始化一次就行,课程数据暂不传递
/**
* 初始化视图
*/
private void initView(){
preprocessorParam();
//周次标题
addWeekTitle(this);
//星期标签
addWeekLabel(this);
//课程信息
flushView(null, weekNum);
}
接着刷新布局函数,因为组件课程信息会根据周次的不同而产生变化,所以我们将它抽离成一个函数。
/**
* 刷新课程视图
* @param courseMap 课程数据
* @param weekNum 周次
*/
private void flushView(Map<Integer, List<Course>> courseMap, long weekNum) {
//初始化主布局
if (null != mMainLayout) removeView(mMainLayout);
mMainLayout = new LinearLayout(mContext);
mMainLayout.setOrientation(HORIZONTAL);
mMainLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
addView(mMainLayout);
//周次标题
mWeekTitle.setText("第 " + weekNum + " 周");
//左侧节次标签
addLeftNumber(mMainLayout);
//课程信息
if (null == courseMap) {//数据为空
addVerticalTableLine(mMainLayout);
TextView emptyLayoutTextView = createTextView("暂无数据!", titleSize, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, 0, getResources().getColor(R.color.textColor), Color.WHITE);
mMainLayout.addView(emptyLayoutTextView);
} else {//不为空
for (int i = 1; i <= weeksNum; i++) {
addVerticalTableLine(mMainLayout);
addDayCourse(mMainLayout, courseMap, i);//添加单天要上的课程
}
addBottomButton();
}
invalidate();
}
还有上面函数中传递的Map<Integer, List<Course>> courseMap
参数是根据本学期所有课程解析出来本周要上的课程。
最后在activity中根据id找到这个控件,并加载一下数据。
/**
* 加载数据
*
* @param courses
*/
public void loadData(List<Course> courses, Date date) {
this.courseList = courses;
this.startDate = date;
weekNum = calcWeek(startDate);
handleData(courseMap, courses, weekNum);
flushView(courseMap, weekNum);
}
在这个方法就可以通过handleData
方法,将传递的课程List集合数据解析成本周要上的课程,并填充到map中,然后再调用flushView
方法刷新一下布局。
这个程序的上课信息都是写死在代码中的,更换课表还要修改源代码。本想着使用SQLite存储数据,然后再新建一个布局可以自定义数据,但是老师还没教到这,而且要准备复习不能花太多时间在计算机上。所以以后有机会再慢慢加内容。
——————
这个博客写的是相当简略,感兴趣的话可以参考源代码
源代码:https://github.com/HeMOua/timetable
标签:定义 container 简单的 自己 对象 inf 老师 val for
原文地址:https://www.cnblogs.com/hemou/p/12641871.html