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 ...
随机推荐
- SQLite3的使用(封装很长,直接使用sqlite3_open函数,LIBS += sqlite3.dll 即可)good
1.下载sqlite3相关文件sqlite3.dll.sqlite3.h(可从http://download.csdn.net/detail/mingxia_sui/5249070下载),添加到工程的 ...
- 网络知识02:TCP/IP概述
一 DOD模型 传输控制协议IRI特网协议(TCP/IP)组是由美国国防部(DOD)所创建的,主要用来确保数据的完整性及在毁灭性战争中保持通信 是由一组不同功能的协议组合在一起的协议簇 利用一组协议 ...
- Kafka 集群在马蜂窝大数据平台的优化与应用扩展
马蜂窝技术原创文章,更多干货请订阅公众号:mfwtech Kafka 是当下热门的消息队列中间件,它可以实时地处理海量数据,具备高吞吐.低延时等特性及可靠的消息异步传递机制,可以很好地解决不同系统间数 ...
- idea编辑器的使用
编辑器下载和安装就不说了,网上每次版本都更换得好快 ,发新版的人很多idea2019:https://pan.baidu.com/s/1zc1wkQLLVxbXSjy4ISN4aQ 提取码:cgah, ...
- bootstrap 轮播craousel 采坑之(修改默认鼠标浮动轮播不停止)
首先上bootstrap 官网 https://v3.bootcss.com/javascript/#carousel 设置这个参数就可以,后面说如何采坑.见代码 html 部分 <!-- 轮播 ...
- C# 启动 a Python Web Server with Flask
概览 最近有个需求是通过c#代码来启动python 脚本.嘿~嘿!!! 突发奇想~~既然可以启动python脚本,那也能启动flask,于是开始着手操作. 先看一波gif图 通过打开控制台启动flas ...
- docker-none
禁用容器的网络连接 如果要完全禁用容器上的网络堆栈,可以--network none在启动容器时使用该标志.在容器内,仅创建环回设备.以下示例说明了这一点. 创建容器. $ docker run -- ...
- Springboot Jackson配置根本方案, 日期格式化, 时区设置生效
当项目集成配置的功能越来越多, 说不准哪个配置就影响到了什么. 比如你启用了EnableMvC, 默认配置文件配置的一些文件就失效了. 虽然约定大于配置,让springboot可以极简化构建, 但不熟 ...
- (数据科学学习手札72)用pdpipe搭建pandas数据分析流水线
1 简介 在数据分析任务中,从原始数据读入,到最后分析结果出炉,中间绝大部分时间都是在对数据进行一步又一步的加工规整,以流水线(pipeline)的方式完成此过程更有利于梳理分析脉络,也更有利于查错改 ...
- react根据传参的不同动态注册不同的子组件
上一篇文章介绍了关于Vue如何根据传参的不同动态注册不同的子组件,实现过程请查阅Vue.extend动态注册子组件,由Vue的这个功能我就自然联想到了使用react该如何实现同样的功能呢.其实,用re ...