没想到我的小DEMO可以帮到好多刚入门的同学,为了方便大家获取源码,我把项目源码上传到了CSDN上面,有需要的同学去下载吧,链接如下:https://download.csdn.net/download/magicmhd/11663166
希望大家在源码的基础上再进行自己的开发!做一个属于自己的记账本!加油

1、在androidstudio上新建一个basic项目

2、在系统自动创建的content_main.xml文件中添加listview,代码如下:

  <ListViewandroid:id="@+id/lv_main"android:layout_width="wrap_content"android:layout_height="wrap_content" />

3、编写listview适配器,这里把代码贴出,不再一一介绍,代码如下:

public class CostListAdapter extends BaseAdapter {private List<CostBean> mList;private Context mContext;private LayoutInflater mLayoutInflater;public CostListAdapter(Context context, List<CostBean> list){mContext=context;mList=list;mLayoutInflater=LayoutInflater.from(context);}@Overridepublic int getCount() {return mList.size();}@Overridepublic Object getItem(int position) {return mList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder;if (convertView==null){viewHolder=new ViewHolder();convertView=mLayoutInflater.inflate(R.layout.list_item,null);viewHolder.mTvCostTitle= (TextView) convertView.findViewById(R.id.tv_title);viewHolder.mTvCostDate= (TextView) convertView.findViewById(R.id.tv_date);viewHolder.mTvCostMoney= (TextView) convertView.findViewById(R.id.tv_cost);convertView.setTag(viewHolder);}else {viewHolder= (ViewHolder) convertView.getTag();}CostBean bean=mList.get(position);viewHolder.mTvCostTitle.setText(bean.costTitle);viewHolder.mTvCostDate.setText(bean.costDate);viewHolder.mTvCostMoney.setText(bean.costMoney);return convertView;}private static class ViewHolder{public TextView mTvCostTitle;public TextView mTvCostDate;public TextView mTvCostMoney;}
}

这里再给出list_item的布局代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="80dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="150dp"android:layout_height="80dp"android:layout_marginLeft="10dp"android:layout_alignParentLeft="true"android:singleLine="true"android:ellipsize="marquee"android:textSize="35sp"android:gravity="center"android:text="costTitle"/><TextViewandroid:id="@+id/tv_date"android:layout_width="wrap_content"android:layout_height="80dp"android:gravity="center"android:textSize="20sp"android:layout_marginLeft="15dp"android:layout_toRightOf="@+id/tv_title"android:text="costDate"/><TextViewandroid:id="@+id/tv_cost"android:layout_width="wrap_content"android:layout_height="80dp"android:gravity="center"android:layout_alignParentRight="true"android:textSize="30sp"android:layout_marginRight="20dp"android:text="30"/></RelativeLayout>

4、测试适配器是否正常(经过运行调试,正常)。

5、新建实体Bean对象,代码如下:

public class CostBean implements Serializable {public String costTitle;public String costDate;public String costMoney;
}

这里implements的意义是为了一会的intent传递。

6、新建数据库,并完成简单的增删改查业务,代码如下:

public class DatabaseHelper extends SQLiteOpenHelper {public static final String COST_DATE = "cost_date";public static final String COST_TITLE = "cost_title";public static final String COST_MONEY = "cost_money";public static final String COST = "cost";public DatabaseHelper(Context context) {super(context, "daily", null, 1);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("create table if not exists cost("+"id integer primary key, "+"cost_title varchar, "+"cost_date varchar, "+"cost_money varchar)");}public void insertCost(CostBean costBean){SQLiteDatabase database=getWritableDatabase();ContentValues cv=new ContentValues();cv.put(COST_TITLE,costBean.costTitle);cv.put(COST_DATE,costBean.costDate);cv.put(COST_MONEY,costBean.costMoney);database.insert(COST,null,cv);}public  void deleteAllData(){SQLiteDatabase database=getWritableDatabase();database.delete(COST,null,null);}public Cursor getAllCostData(){SQLiteDatabase database=getWritableDatabase();return database.query(COST,null,null,null,null,null,COST_DATE + " ASC");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

这里新建了一个“daily”的数据库和“cost”表,并写了简单的增加、删除和查询数据的功能。

7、在这里给大家推荐一个查看SQLite数据库比较好用的工具---SQLiteStudio,具体使用方法给大家放一个连接,里面讲的非常清楚:https://blog.csdn.net/Monly_jiajia/article/details/58621469

8、我先把MainActivity的代码放在这儿,然后再跟大家解释。代码如下:

public class MainActivity extends AppCompatActivity {private List<CostBean> mCostBeenList;private DatabaseHelper mDatabaseHelper;private CostListAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);mDatabaseHelper=new DatabaseHelper(this);mCostBeenList=new ArrayList<>();initCostData();ListView costList= (ListView) findViewById(R.id.lv_main);mAdapter=new CostListAdapter(this,mCostBeenList);costList.setAdapter(mAdapter);FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);fab.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);LayoutInflater inflater=LayoutInflater.from(MainActivity.this);View viewDialog=inflater.inflate(R.layout.new_cost_data,null);final EditText title= (EditText) viewDialog.findViewById(R.id.et_cost_title);final EditText money= (EditText) viewDialog.findViewById(R.id.et_cost_money);final DatePicker date= (DatePicker) viewDialog.findViewById(R.id.dp_cost_date);builder.setView(viewDialog);builder.setTitle("新的花费");builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {CostBean coseBean=new CostBean();coseBean.costTitle=title.getText().toString();coseBean.costMoney=money.getText().toString();coseBean.costDate=date.getYear()+"-"+(date.getMonth()+1)+"-"+date.getDayOfMonth();mDatabaseHelper.insertCost(coseBean);mCostBeenList.add(coseBean);mAdapter.notifyDataSetChanged();}});builder.setNegativeButton("Cancel",null);//勿忘!!!builder.create().show();}});//打开SQLiteStudioSQLiteStudioService.instance().start(this);}private void initCostData() {Cursor cursor= mDatabaseHelper.getAllCostData();if (cursor!=null){while (cursor.moveToNext()){CostBean costBean=new CostBean();costBean.costTitle=cursor.getString(cursor.getColumnIndex("cost_title"));costBean.costDate=cursor.getString(cursor.getColumnIndex("cost_date"));costBean.costMoney=cursor.getString(cursor.getColumnIndex("cost_money"));mCostBeenList.add(costBean);}cursor.close();}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == R.id.action_chart) {
//            Intent intent=new Intent(MainActivity.this,ChartActivity.class);
//            intent.putExtra("cost_list", (Serializable) mCostBeenList);
//            startActivity(intent);return true;}return super.onOptionsItemSelected(item);}@Overrideprotected void onDestroy() {SQLiteStudioService.instance().stop();super.onDestroy();}
}

代码大家仔细一读也就会懂,最主要的内容是我们点击一个FloatingActionButton时可以新记一笔账单,这里使用AlertDialog实现,下面再贴出AlertDialog的view  new_cost_data的xml布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:gravity="center"android:layout_height="match_parent"><EditTextandroid:id="@+id/et_cost_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="4dp"android:hint="Cost Title"/><EditTextandroid:id="@+id/et_cost_money"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="4dp"android:hint="Cost Money"/><DatePickerandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="4dp"android:id="@+id/dp_cost_date"android:datePickerMode="spinner"android:calendarViewShown="false"/></LinearLayout>

需要注意的是,在执行插入(或其他方式)数据到数据库时,我们也一块把数据加入到了CostBean里面(使用一开始定义好的mCostBeanList),另外也要注意,在对数据的操作完成后,记得使用adapter更新数据!即:

mAdapter.notifyDataSetChanged();

关于Android记账本暂时跟大家分享到这儿,其实还可以在这个项目的基础上再加许多东西。

Android实现记账本(麻雀虽小,五脏俱全)相关推荐

  1. 麻雀虽小五脏俱全的Vue拉勾项目,看看应该有帮助

    全栈系列Vue版拉勾,客官们来瞧瞧 模拟拉勾app系列---vue前端界面 github地址,来猛戳吧 前言 本项目是本人在闲暇时间编写的一个初级引导项目,麻雀虽小五脏俱全,所使用的东西绝大多数在开发 ...

  2. 基于android的记账软件,基于Android的记账软件的设计与实现

    摘要: 随着经济社会的发展,人们的资金流动更加频繁,对记账的需求也逐渐提高.目前移动设备已经普及,移动记账以其随时随地记账,高效统计的特点,受到了广大记账理财人士的青睐.本文通过对国内外手机记账软件发 ...

  3. android简单记账源码,Android+个人记账程序源码.rar(入门级)

    [实例简介]Android 个人记账程序源码,入门级源码,适合新手... [实例截图] [核心代码] package com.cola.ui; import java.util.Calendar; i ...

  4. 基于android的记账APP大作业项目

    基于android的记账APP 一 项目介绍 由于日常生活中,有很多月光一族的人们,他们往往不知不觉,觉得钱用的差不多了.而且最后回想起来,还不知道钱用到哪些地方了.所以开发此软件的目的,就是为了解决 ...

  5. 记账App Java代码_基于android的记账APP大作业项目

    基于android的记账APP 一 项目介绍 由于日常生活中,有很多月光一族的人们,他们往往不知不觉,觉得钱用的差不多了.而且最后回想起来,还不知道钱用到哪些地方了.所以开发此软件的目的,就是为了解决 ...

  6. Android 移动记账管理系统

    资源链接:Android程序记账管理系统(实现日常的记账本功能)-Android文档类资源-CSDN下载目前随着经济的不断发展,各种商品和新型的购物方式,不断的冲击着人们的生活方式和消费方式人们的消费 ...

  7. 麻雀虽小五脏俱全的Vue拉勾项目,看看应该有帮助 1

    全栈系列Vue版拉勾,客官们来瞧瞧 模拟拉勾app系列-vue前端界面 github地址,来猛戳吧 前言 本项目是本人在闲暇时间编写的一个初级引导项目,麻雀虽小五脏俱全,所使用的东西绝大多数在开发中都 ...

  8. 基于android的记账本论文,(毕业论文)基于安卓的记账本.doc

    目录 1.概述3 1.1 设计目标3 1.2 开发工具3 2 需求分析4 2.1系统功能:4 2.2系统功能描述:4 2.3系统用例图:5 2.4运行环境需求5 3 系统设计6 3.1基本设计概念和处 ...

  9. 基于android的记账本国内外研究现状,基于android系统的记账本的设计与实现.doc

    摘要:今年来,人们生活节奏的加快,移动端技术的成熟,催生出了一大批低头族,大量手机app应运而生.收入的增加,消费习惯的恶化,超前消费也随之出现,所以一款记账软件是必不可少的.本作品设计了智能账单记录 ...

  10. 基于Android的记账APP论文,基于Android平台的手机记账系统的设计与实现

    摘要: 在经济社会中,"理财"一词对于人们来说已不再陌生.人们的生活收入稳步上升,用于工作,住房,休闲娱乐的财务支出增多,做好详细的收支计划,将有利于对个人,家庭的经济收入,支出状 ...

最新文章

  1. 3.Java集合-HashSet实现原理及源码分析
  2. php实现文件夹管理器,php实现文件管理与基础功能操作
  3. 欧几里德投影(Euclidean projection)
  4. Python开发环境Wing IDE 5.0测试第八版发布
  5. Oracle GoldenGate复制过程
  6. GraphQL —— 标量类型
  7. [转]Entity Framework 4.1 正式版发布
  8. git每次更新都需要输入账号密码,如何解决?
  9. android 暂停音乐播放器,Android仿音乐播放器带进度的播放暂停按钮
  10. 计算机考研调剂技巧,关于考研调剂的不可不知的窍门
  11. 物流公司老板血泪史:我如何被山寨版物流软件毁掉
  12. loadClass 使用
  13. 分享微软官方Demo用的SharePoint 2010, Exchange 2010, Lync 2010虚拟机
  14. matlab在化学中的应用举例,MATLAB在化学中的应用
  15. 判断四边形凹凸性及凹点
  16. WorldPress出现Briefly unavailable for scheduled maintenance. Check back in a minute.的解决方法
  17. ArcEngine实现动态加载地图
  18. 天啊!中国第一奇人:天天枸杞水,活到256岁!
  19. 天空之城 单音版
  20. Excel文件的上传下载解析详解

热门文章

  1. 计算机相关的名词解释
  2. android 解压jar,解压和打包Jar - 海阔天空玩世不恭的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. Echarts图的图例为自定义图片
  4. 网络管理-Pageadmin CMS构建企业网站的方法
  5. ▲什么是类?类有什么作用?
  6. 深究递归和迭代的区别、优缺点及实例对比
  7. 购买一台计算机需要哪些配件,组装一台电脑需要哪些配件【详细列举】
  8. 2021-04-30 AndroidStudio_3种按钮点击事件_小白龙抄作业
  9. 嵌入式系统开发-麦子学院(14)- uboot详解(1)
  10. Opengl实例7:glm(0.9.8.5)库 +矩阵旋转+课后作业