【Android应用开发实例】简约记账软件

姓名

计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
在这里插入图片描述
效果
在这里插入图片描述

注意:因为设置了查看某一天记录的功能,所以主页面只能查看今日的账单;添加记录时,如果改动日期,就不会在主页面显示。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值