初识Android 制作一个简单的记账本

  • 主要功能
    • 实现一个记账本页面
    • 可以添加数据并更新到页面中
  • 主要步骤
  • 运行截图
    • 主页面
    • 点击红色按钮弹出添加页面
    • 完成后自动更新到目录下

主要功能

实现一个记账本页面

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

主要步骤

  1. 创建一个新项目,选择Basic Activity
  2. 修改content_main.xml,将TextView修改成ListView
<ListViewandroid:id="@+id/lv_main"android:layout_width="match_parent"android:layout_height="match_parent"/>
  1. 创建一个layout,取名为list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"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:gravity="center"android:singleLine="true"android:textSize="30sp"android:ellipsize="marquee"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:layout_marginRight="20dp"android:textSize="25sp"android:text="25"/>
</RelativeLayout>

效果如图:

  1. 创建一个CostBean.java
public class CostBean {public String costTitle;public String costDate;public String costMoney;
}
  1. 创建一个CostListAdapter.java,继承BaseAdapter
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;}
}
  1. 在MainActivity中设置
mDatabaseHelper = new DatabaseHelper(this);
mCostBeanList = new ArrayList<>();
ListView costList = findViewById(R.id.lv_main);
initCostData();
costList.setAdapter(mAdapter);

定义的全局变量

private List<CostBean> mCostBeanList;
private DatabaseHelper mDatabaseHelper;
private CostListAdapter mAdapter;

调用之前,创建一个initCostData()方法,使得调用它时,我们可以从数据库中查出所有的数据并显示到ListView上

private void initCostData() {Cursor cursor = mDatabaseHelper.getAllCostData();if (cursor!=null){while (cursor.moveToNext()){CostBean costBean = new CostBean();int dataColumnIndex = cursor.getColumnIndex("cost_title");costBean.costTitle = cursor.getString(dataColumnIndex + 0);costBean.costDate = cursor.getString(dataColumnIndex + 1);costBean.costMoney = cursor.getString(dataColumnIndex + 2);mCostBeanList.add(costBean);}cursor.close();}}
  1. 数据库的创建,创建一个DatabaseHelper.java,用以保存记账的数据
    创建一个数据库取名为account_daily;在onCreate方法中创建一张表account_cost,在其中增加相应的字段
public class DatabaseHelper extends SQLiteOpenHelper {public DatabaseHelper(Context context) {super(context,"account_daily", null, 1);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("create table if not exists account_cost(" +"id integer primary key, " +"cost_title varchar, " +"cost_date varchar, " +"cost_money varchar)");}

调用insertCost(),将一个插入的对象传递进数据库中:

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("account_cost",null,cv);}

查询数据库中Cursor所有结果:

    public Cursor getAllCostData(){SQLiteDatabase database =getWritableDatabase();return database.query("account_cost",null,null,null,null,null, "cost_date ASC");}public void deleteAllData(){SQLiteDatabase database = getWritableDatabase();database.delete("account_cost",null,null);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}
  1. 修改fab按钮,使得当我们点击时弹出一个新的窗口,可以创建一条新纪录,并且能保存并更新数据,在MainActivity中修改
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("New Cost");builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {CostBean costBean = new CostBean();costBean.costTitle = title.getText().toString();costBean.costMoney = money.getText().toString();costBean.costDate = date.getYear() + "-" +(date.getMonth() + 1) + "-" +date.getDayOfMonth();mDatabaseHelper.insertCost(costBean);mCostBeanList.add(costBean);mAdapter.notifyDataSetChanged();}});builder.setNegativeButton("Cancel",null);builder.create().show();}});
}

其中还要给创建的Dialog创建一个新的布局,我们取名为new_cost_data.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center"><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:id="@+id/dp_cost_date"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="4dp"android:datePickerMode="spinner"android:calendarViewShown="false"/>
</LinearLayout>

效果大致如下:

至此程序大致编辑完毕,我们可以来运行测试一下!

运行截图

主页面

点击红色按钮弹出添加页面

完成后自动更新到目录下

作者:杨坤萍
链接: link.

初识Android 制作一个简单的记账本相关推荐

  1. Android——一个简单的记账本APP

    一个简单的记账本APP 视频效果预览 添加账目记录 效果预览 添加账目记录实现 简述 实现 获取日期 字符串时间戳转Date Date转星期 获取时间 Switch控制显示和隐藏 更改Switch样式 ...

  2. AndroidStudio 制作一个超简易记账本App(1.0)【含详细步骤】

    先看最终效果: 1.首先创建一个Empty Activity 2.在activity_main.xml里编写主界面布局 根据预览图,主界面需要一个ListView和一个ImageButton,还要给I ...

  3. 用java实现一个简单的记账本

    /* 实现记账收入和支出 可以查看记账的结果 原来的基础金额是10000元 */ 主程序代码 class FamilyAccount{public static void main(String[] ...

  4. android做一个音乐播放器,制作一个简单的Android版的音乐播放器

    音乐播放器是一个非常常见的应用,这篇博客就是介绍如何制作一个简单的音乐播放器,这款音乐播放器具有以下的功能:播放歌曲.暂停播放歌曲..显示歌曲的总时长.显示歌曲的当前播放时长.调节滑块可以将歌曲调节到 ...

  5. 制作一个简单的Android版的音乐播放器

    音乐播放器是一个非常常见的应用,这篇博客就是介绍如何制作一个简单的音乐播放器,这款音乐播放器具有以下的功能:播放歌曲.暂停播放歌曲..显示歌曲的总时长.显示歌曲的当前播放时长.调节滑块可以将歌曲调节到 ...

  6. 制作一个简单的新闻客户端

    前面的博客中介绍了在Android中实现网络通信,这篇博客将是对前面介绍的技术的一个综合运用,制作一个简单的新闻客户端,在这个新闻客户端中用到了ListView.ListView的优化.使用开源框架访 ...

  7. 如何制作一个简单的短视频 app

    如果想制作一个简单的短视频 app,可以考虑以下步骤: 确定 app 的目标和功能:需要明确 app 的目标受众和提供的功能,以确定 app 的整体设计方向. 选择开发平台:根据自己的技术能力和预算选 ...

  8. TensorFlow应用:制作一个简单的聊天机器人

    现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri.Google Now.Amazon Alexa.微软小冰等等.前不久有一个视频比较了Google N ...

  9. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

最新文章

  1. windows下mysql安装配置启动
  2. 当 Mars 遇上 RAPIDS:用 GPU 以并行的方式加速数据科学
  3. 开放科学背景下的科学数据开放共享:国家青藏高原科学数据中心的实践
  4. 此项目与visual studio的当前版本不兼容_新MacBook能用旧软件?可能是最详细的兼容测试...
  5. LeetCode 540. Single Element in a Sorted Array
  6. 格兰杰因果关系检验r语言_R语言 t检验t.test
  7. inline在C99以及Gcc中的处理方式[转]---很好的一篇总结
  8. 《python程序员面试宝典(陈屹)》chapter1 技术面试方法论
  9. 综合富贵论坛,富贵网,新老富贵的简单解释
  10. 用C++实现布线问题
  11. 一键查询快递物流单号,分析提前签收
  12. 2022-2028全球智能门锁系统行业调研及趋势分析报告
  13. MSP430F149TIMER_A的连续计数模式
  14. 时间的加减法怎么用计算机算,时间加减计算器
  15. a href链接弹出新窗口的方法
  16. 模糊搜索——Vue单页面-Element UI
  17. stm32 学习 (设置TIM4输出4路 pwm J-LINK仿真验证)
  18. 【武忠祥高等数学基础课笔记】反常积分
  19. 构建之法读书笔记01
  20. 程序员,996的压力下,还要去做副业吗?忙,也要做,这是我的答案

热门文章

  1. TO B革命 读书笔记整理
  2. el-input输入11位手机号,边输入边验证手机号码格式
  3. 黑马全新推出《2022年最实用的PS全套教程》
  4. 学系统集成项目管理工程师(中项)系列17a_范围管理(上)
  5. MinGW 和 MSYS
  6. IDEA如何自动/手动导入包
  7. 运维的一些日常知识点
  8. 第8章 中医证型关联规则挖掘代码调整
  9. windows批处理学习
  10. traceping是什么意思_trace命令是什么意思,trace怎么读是什么意思?