姓名
计2105 202121147153 张永星
代码量
约800行
实现功能
主界面 显示记录数据
收入/支出界面 进行收入/支出的添加
备注对话框 进行备注添加
时间日期对话框 进行时间日期设置
实现过程
界面绘制
activity_main
今日收支明细界面绘制
- 设计图
使用LinearLayout,orientation设置为vertical;头布局使用相对布局,靠左显示应用名称,靠右显示搜索图片;ListView去除边框,去除滑动轴;添加功能按钮放置在右下角,背景图片绘制为一个绿色矩形。
item_mainlv
收支页面每一项的绘制
activity_record
记录页面的布局绘制
整体使用LinearLayout布局方式,使用TabLayout,使用ViewPager视图滑动切换工具
fragment_outcome
整体使用LinearLayout布局方式,其中使用GridView、KeyboardView、TextView、EditText控件。
Java代码
MainActivity
onCreate() :初始化控件todayLv、mDatas,设置适配器adapter,加载每一条数据源到todayLv当中。其中放置initTime()方法,用于初始化时间。
initTime():初始化年月日,传入DBManager.getAccountListOneDayFromAccounttb(year, month, day),用于确定查找哪一天的记录。
onResume():其中放置loadDBData()方法,用于将数据库Accounttb中的数据加载至mData中。
loadDBData():将数据库Accounttb中的数据加载至accountListOneDayFromAccounttb中,再将accountListOneDayFromAccounttb全部传入mDatas。
onClick():用于监听点击事件:添一笔、更多功能、搜索。本项目只完成了添一笔功能。
RecordActivity
onCreate():查找TabLayout、ViewPager页面,TabLayout完成页面滑动,ViewPager展示页面;调用initPager()方法,设置ViewPager加载页面。
initPager():初始化ViewPager页面的集合,创建收入和支出页面,放置在Fragment当中,创建一个RecordPagerAdapter,这是一个自定义的适配器用于将Fragment与ViewPager相关联。使用setupWithViewPager,将TabLayout和viewPager关联。
onClick():设置监听事件:返回,用于从记录页面返回主页面。
frag_record
BaseRecordFragment
创建控件keyboardView、moneyEt、typeIv、typeTv、beizhuTv、timeTv、typeGv、typeList、adapter、accountBean。
其中typeList会在子类中进行数据输入。
onCreate():创建一个记录类对象,初始化对象,类型为其他。
onCreateView():创建fragment视图;调用方法,initView(view)、setInitTime()、loadDataToGv()、setGVListener();
initView():用于初始化页面;
setInitTime():用于获取时间;
loadDataToGV():使得GridView能够展示类型信息
setGVListener():设置GridView的点击事件
initView():初始化控件,keyboardView、moneyEt、typeIv、typeTv、typeGv 、beizhuTv、timeTv;为beizhuTv、timeTv设置监听点击事件;使用showKeyboard()方法,让软键盘显示出来;为键盘设置接口,监听键盘是否被点击。
setInitTime():获取系统当前时间,时间赋给timeTv,并将时间传入accountBean;获取年月日,传入accountBean。
loadDataToGV():为typeList开辟控件,设置适配器,将typeGv和数据相关联。
setGVListener():点击item,提示绘制发生变化;获取被点击的item信息,对typeTv、typeIv进行更新,将信息存入accountBean。
saveAccountToDB():抽象类,用于将accountBean传入数据库。
onClick():为备注、日期事件设置监听事件。其中调用showTimeDialog()、showBZDialog()。
showTimeDialog():创建SelecTimeDialog对象,展示日期时间对话框,设立确定按钮被点击了的监听器,更新timeTv,将time、year、month、day传入accountBean。
showBZDialog():创建BeiZhuDialog对象,展示备注对话框;调用setDialogSize函数,调整对话框和屏幕尺寸一致;更新beizhuTv,将备注信息传入accountBean。
OutcomeFragment
继承BaseRecordFragment
loadDataToGv():重写该方法,将支出类型数据传入typelist;更新typeTv、typeIv。
saveAccountToDB():设置kind类型为0;调用DBManager.insertItemToAccounttb(accountBean),将记录的accountBean传入accounttb。
IncomeFragment
与OutcomeFragment逻辑一致。
适配器
RecordPagerAdapter
RecordPagerAdapter类用于管理支出和收入两个Fragment。
通过getPageTitle方法获取Fragment的标题。
TypeBaseAdapter
构造器:传入上下文context,传入List< TypeBean > mDatas。
getView():加载布局;查看布局当中的控件iv、tv;获取指定位置的数据源,更新iv、tv。还需判断当前图片是否被选中。
AccountAdapter
创建mDatas、year、month、day。
AccountAdapter(Context context, List< AccountBean > mDatas):传入上下文、记录数据。初始化年月日。
class ViewHolder:定义ViewHolder类。初始化typeIv、typeTv、timeTv、beizhuTv、moneyTv。
getView():getView()方法用于设置每个item的显示效果;通过getItem(int position)方法获取到对应位置的对象实例bean,并将其数据显示在界面上;将View返回给ListView进行显示;ViewHolder主要用于保存已经创建过的View的控件,可以避免findViewById()方法的重复调用,提高了性能。
数据库
AccountBean
该类描述记录一条记录的相关内容
int id;
String typename; //类型
int sImageId; //选中图片的类型
String beizhu; //备注
float money; //价格
String time; //保存时间字符串
int year;
int month;
int day;
int kind;
DBOpenHelper
onCreate():创建两个表:typetb、accounttb。typetb用于存放类别信息,accounttb用于存放记录信息。
insertType():向表typetb中存入类别信息。支出15类,收入9类。
DBManager
用于管理数据库信息。
initDB():初始化数据库。
ListgetTypeList(int kind)():读取数据库当中的内容,写入内存集合中。
用于:
List<TypeBean> outlist = DBManager.getTypeList(0);
insertItemToAccounttb():向记账表中插入一条元素。
List< AccountBean >getAccountListOneDayFromAccounttb(int year,int month,int day):获取记账表中某一天的支出或收入记录
List< AccountBean >getAccountListOneDayFromAccounttb():获取记账表中某一天的支出或收入记录
UniteApp
表示全局应用的类;初始化数据库,使得创建项目时就创建数据库。
工具
SelectTimeDialog
用于将日期时间信息传送出去。
创建控件hourEt、minuteEt、datePicker、ensureBtn、cancelBtn。
onCreate():初始化控件hourEt、minuteEt、datePicker、ensureBtn、cancelBtn;为ensureBtn、cancelBtn设置监听事件;隐藏日历头部。
onClick():为取消、确定设置监听事件。
取消:调用cancel()方法。
确定:获取年月日,调用接口函数,参数设置为timeFormat,year,month,dayOfMonth。
hideDatePickerHeader():隐藏日历头部
BeiZhuDialog
创建控件:et、cancelBtn、ensureBtn。
onCreate():初始化et、cancelBtn、ensureBtn;为cancelBtn、ensureBtn设置监听事件。
onClick():为cancelBtn、ensureBtn设置监听事件。
取消:调用cancel函数。
确定:调用接口函数。
getEditText():返回备注信息,便于直接为beizhuTv更新备注信息。
setDialogSize():设置Dialog的尺寸和屏幕尺寸一致;调用sendEmptyMessageDelayed()方法,自动弹出软键盘。
KeyBoardUtils
KeyBoardUtils():在构造方法中,需要传入KeyboardView和EditText两个参数;首先设置EditText的输入类型为InputType.TYPE_NULL,这样可以取消系统键盘的弹出;创建一个自定义的键盘对象k1,xml文件地址为R.xml.key;将创建好的键盘对象k1设置到KeyboardView中,并且启用这个KeyboardView(setEnabled(true));设置键盘被点击了的监听(setOnKeyboardActionListener(listener)),通过监听用户的点击操作,从而实现自定义键盘的输入效果。
onKey():为每个键设置监听事件。
showKeyboard(): 显示键盘
hideKeyboard():隐藏键盘
应用截图
初始:
记一笔:
选择餐饮
添加备注:cookie
设置时间 默认
输入金额:12
效果
注意:因为设置了查看某一天记录的功能,所以主页面只能查看今日的账单;添加记录时,如果改动日期,就不会在主页面显示。