android开发实战-记账本APP(一)
记账本开发流程:
对于一个记账本的初步开发而言,我实现的功能有:
①实现一个记账本的页面
②可以添加数据并更新到页面中
③可以将数据信息以图表的形式展现
(一)首先,制作一个记账本的页面。
①在系统自动创建的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里。
android开发实战-记账本APP(一)的更多相关文章
- android开发实战-记账本APP(二)
继昨天的开发,继续完成今天的内容. (一)开始构建一些业务逻辑,开始构建记账本的添加一笔记账的功能. ①对fab按钮的click时间进行修改,创建一个AlertDialog.Builder对象,因此我 ...
- 安卓开发实战-记账本APP(六)
记账本APP开发---终结篇 昨天的动态数字录屏奉上:在抖音上拍了一个(ps:欢迎点赞) https://v.douyin.com/poEjmG/ 今天将图表的内容进行了制作,我用的是MPChart的 ...
- Android开发实战——记账本(2)
开发日志(2)——Bean目录以及数据库 首先编写一些自己生成的数据进行测试,看一下能否显示在模拟器上.那前提就是先写出bean目录,这和之前学的Javaweb步骤差不多.bean目录有三个变量事件. ...
- 安卓开发实战-记账本APP(四)
今天实现的内容有:添加账本信息,个人头像的切换,密码的修改,退出登录. 添加账本信息有三个功能: ①记一笔支出项目 ②记一笔收入项目 ③清空所有项目 在此期间遇到的困难有:Activity与Fragm ...
- Android开发实战——记账本(4)
开发日志(4)——MainActivity 在MainActivity中编写了几个方法.首先,点击账本的一条记录可以选择删除他,然后重写了fab,使之在点击他后能够添加记录.还写了删除全部记录的方法. ...
- Android开发实战——记账本(5)
开发日志——(5) 今天打算将图标的功能实现,将打开图表的选项放在右上方,所以重写MainActivity中的onOptionsItemSelected方法.增添Chart选项 public ...
- 安卓开发实战-记账本APP(三)
本次实现的是有关登录,注册和整体页面的改观,实现下方选项导致页面的切换效果. 利用到的技术有Sqlite数据库的增删改查,与fragment实现.由于暂时没有找到合适的图标,先借用微信的图标暂代一下. ...
- Android开发实战——记账本(6)
开发日志——(6) 今天将app签名打包,并部署在了真机上.真机上的截图: 运行成功:
- Android开发实战——记账本(3)
开发日志(3)——适配器 昨天将bean类还有DatabaseHelper类写完.为了在MainActivity中调用,将数据保存到数据库中并显示出来.所以要先编写适配器CostListAdapter ...
随机推荐
- lumen简单使用exel组件
1.首先打开命令行,进入到lumen项目的根目录中,然后用composer下载excel组件 composer require maatwebsite/excel ~2.1.0 2.安装成功后,在bo ...
- DEVOPS技术实践_19:Pipeline的多参数json调用
在上一篇学习了把参数写进Json文件,然后通过去Json文件,调用参数的方法 1. 三元运算符介绍 调用的方法是通过一个三元运算符实现的 gender = prop.GENDER? prop.GEND ...
- 软RAID和硬RAID的区别
要实现RAID可以分为硬件实现和软件实现两种.所谓硬RAID就是指通过硬件实现,同理软件实现就作为软RAID. 硬RAID 就是用专门的RAID控制器将硬盘和电脑连接起来,RAID控制器负责将所有 ...
- 《深入理解JAVA虚拟机》-自己动手编译JDK
环境 Ubuntu12.4-http://mirrors.163.com/ubuntu-releases/12.04/ --需要安装纯英文版,避免中文引起不必要的麻烦 OpenJDK7-https:/ ...
- 设置本地上网IP
在局域网中,我们经常需要根据网络连接环境来对本地连接的IP地址进行手动设置,那么如何对IP地址进行设置呢?下面小编就把教程介绍给大家. 1. 右击桌面“网上邻居”->选择“属性”,打开“网络共享 ...
- 量化投资学习笔记07——python知识补漏
看<量化投资:以python为工具>这本书,第一部分是python的基础知识.这一部分略读了,只看我还不知道或不熟的. 定义复数 x = complex(2, 5) #2+5j 也可以直接 ...
- Mysql 性能优化Explain详解
explain 功能我们在日常使用中,使用慢查询找到执行时间比较久的查询,然后使用SHOW STATUS.SHOW PROFILE.和explain做单条语句的分析.使用explain关键字可以模拟优 ...
- Java配置文件读取中文乱码问题
背景 这是我之前在做的用友服务对接开发,昨天领导拿给财务测试时告诉我有乱码,当时我第一想法是用友那边的编码格式有问题,因为还在做其他任务,我说等问一下用友他们用的什么编码格式我们这边改一下,然后今天早 ...
- springboot整合@Scheduled定时任务的使用
1.启动类里面添加注解@EnableScheduling ,例如: @SpringBootApplication@EnableScheduling@MapperScan("com.examp ...
- kaggle预测房价的代码步骤
# -*- coding: utf-8 -*- """ Created on Sat Oct 20 14:03:05 2018 @author: 12958 " ...