记账本开发流程:

对于一个记账本的初步开发而言,我实现的功能有:

①实现一个记账本的页面

②可以添加数据并更新到页面中

③可以将数据信息以图表的形式展现

(一)首先,制作一个记账本的页面。

①在系统自动创建的content_main.xml文件中添加listview

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

②创建一个list_item.xml来实现见记账本的页面布局,一共需要三个组件,一个是记账信息,记账时间,记账金额

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

页面截图:

③编写适配器并进行测试,因此我们需要建立一个CostListAdapter.java,还需要建立我们的bean对象,因此需要在建立一个CostBean来存储我们的

记账信息。

package com.example.xlfbook;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; import java.util.List; 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);
}
@Override
public int getCount() {
return mlist.size();
} @Override
public Object getItem(int position) {
return mlist.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public 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=convertView.findViewById(R.id.tv_title);
viewHolder.mTvCostDate=convertView.findViewById(R.id.tv_date);
viewHolder.mTvCostMoney=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;
}
}

CostBean,这里implements的意义是为了一会的intent数据传递。

package com.example.xlfbook;

import java.io.Serializable;

public class CostBean implements Serializable {
public String costTitle;
public String costDate;
public String costMoney; @Override
public String toString() {
return "CostBean{" +
"costTitle='" + costTitle + '\'' +
", costDate='" + costDate + '\'' +
", costMoney='" + costMoney + '\'' +
'}';
} public String getCostDate() {
return costDate;
} public void setCostDate(String costDate) {
this.costDate = costDate;
} public String getCostMoney() {
return costMoney;
} public void setCostMoney(String costMoney) {
this.costMoney = costMoney;
} public String getCostTitle() {
return costTitle;
} public void setCostTitle(String costTitle) {
this.costTitle = costTitle;
}
}

④再然后在主程序中获取ListView并设置adapter,并进行适配器的测试。

(二)进行数据库的操作

①建立数据库实现增/删/查的方法实现。

package com.example.xlfbook;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; import androidx.annotation.Nullable; public class DatabaseHelper extends SQLiteOpenHelper { public static final String COST_TITLE = "cost_title";
public static final String COST_DATE = "cost_date";
public static final String COST_MONEY = "cost_money";
public static final String IMOOC_COST = "imooc_cost"; public DatabaseHelper(@Nullable Context context) {
super(context, "imooc_daily", null, 1);
} @Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table if not exists IMOOC_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(IMOOC_COST,null,cv);
}
public Cursor getAllCostData(){
SQLiteDatabase database=getWritableDatabase();
return database.query("IMOOC_COST",null,null,null,null,null,"COST_DATE "+" ASC");
}
public void deleteAllData(){
SQLiteDatabase database=getWritableDatabase();
database.delete("IMOOC_COST",null,null);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
}

在这里新建了一个“imooc_daily”的数据库和“imooc_cost”表,并对他们以及数据信息(cost_title,cost_date,cost_money)进行了常量定义,以便其他程序的使用,并写了简单的增加、删除和查询数据的功能。

今天开发就到这里,明天继续开发实现“添加页面的显示与更新”以及“图表的实现”,最后会发布到github里。

最新文章

  1. 10月28日上午 PHP数据访问
  2. 简单方便的div垂直居中。
  3. 树莓派mjpg-stream摄像头监控
  4. 整理一下Entity Framework的查询
  5. Apache CXF初级介绍(一)
  6. hdu 2044:一只小蜜蜂...(水题,斐波那契数列)
  7. mysql management note
  8. Eclipse汉化问题解决
  9. 树上的DP
  10. 设置Linux时间 同步时间
  11. Nhibernate中 Many-To-One 中lazy=&quot;proxy&quot; 延迟不起作用的原因
  12. 使用hadoop ecipse插件须要注意的问题
  13. js生成随机数
  14. 使用递归算法结合数据库解析成java树形结构
  15. 获取iframe 内容
  16. 【教程】Win7-64位安装OpenSSL详细过程
  17. 定时任务 spring @Scheduled注解
  18. Lua面向对象之二:类继承
  19. Kali安装教程(VMWare)
  20. vim:隆重推荐括号补全插件--auto-pairs

热门文章

  1. 【Docker】初识与应用场景认知
  2. To learns
  3. PyCharm永久破解方法
  4. 开发板免费领!腾讯云IoT应用创新大赛正式启动!
  5. navicat创建存储过程时报错1064
  6. Spring事务失效的 8 大原因,这次可以吊打面试官了!
  7. 彻底掌握CORS跨源资源共享
  8. LCA (Tarjan&amp;倍增)
  9. Vue.js 入门 --- vue.js 安装
  10. eclipse maven工程错误总汇