【Android】家庭记账本手机版开发报告六
一、说在前面
| 昨天 |
1、创建登入和注册界面;2、向数据库添加一张用户表 |
| 今天 |
用图标显示账单情况 |
|
问题 |
1、使用第三方库 hellochart,时添加依赖构建失败 2、在 chertFragment.java中关联 LineChartView时,报空指针异常 |
第三方库hellochart :https://i-beta.cnblogs.com/posts/edit;postId=12238470
使用指导:https://www.cnblogs.com/huolongluo/p/5988644.html
二、图表展示的构建
1、添加一个展示图表的界面,并添加到navigation中。
1)创建展示图表的界面



2)添加到navigation中

2、确定跳转关系(从账单的卡片列表信息的菜单栏中转到账单图表)
1)在菜单中添加一个menuitem


2)在AccountRecordFragment.java中绑定跳转关系
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()){
case R.id.clear:
AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity());
builder.setTitle("清空账单");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
accountRecordViewModel.deleteAllAccountRecord();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) { }
});
builder.create();
builder.show();
break;
case R.id.chart:
NavController navController = Navigation.findNavController(requireActivity(),R.id.fragment4);
navController.navigate(R.id.action_accountRecordFragment_to_chertFragment);
}
return super.onOptionsItemSelected(item);
}
3、引入第三方库hellochart
解决问题:使用第三方库 hellochart,时添加依赖构建失败
1)第三方库所提供的添加依赖的方式
dependencies{
compile 'com.github.lecho:hellocharts-library:1.5.8@aar'
}
2)可行的添加依赖的方式
implementation 'com.github.lecho:hellocharts-library:1.5.8@aar'
4、搭建图表界面
chartFragment.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:layout_height="match_parent"
android:padding="10dp"> <lecho.lib.hellocharts.view.LineChartView
android:id="@+id/chart"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </LinearLayout>
5、图表数据处理和绑定
解决问题:在 chertFragment.java中关联 LineChartView时,报空指针异常
错误方式直接在onCreateView方法中关联组件(编译没错,但是测试这里的时候报空指针异常)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mChart = container.findViewById(R.id.chart);
return inflater.inflate(R.layout.fragment_chert, container, false);
}
重新onViewCreated方法在这里面绑定
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mChart = view.findViewById(R.id.chart);
}
(注:建议控件的初始化写在onViewCreated而非onCreateView)
1)数据处理
private void generateValues(List<AccountRecord> allDate) {
if(allDate != null){
for (int i = 0; i < allDate.size(); i++) {
AccountRecord costBean = allDate.get(i);
String costDate = costBean.getCostTime();
Double costMoney = costBean.getCostMoney();
mAxisXValues.add(new AxisValue(i).setLabel(costDate));
if(!table.containsKey(costDate)){
table.put(costDate,costMoney.intValue());
//mAxisXValues.add(new AxisValue(i).setLabel(costDate));
}else {
int originMoney = table.get(costDate);
table.put(costDate,originMoney + costMoney.intValue());
}
}
}
}
2)坐标轴设置
private void setAxis() {
//坐标轴
Axis axisX = new Axis(); //X轴
axisX.setHasTiltedLabels(true); //X坐标轴字体是斜的显示还是直的,true是斜的显示
axisX.setTextColor(Color.GRAY); //设置字体颜色
axisX.setName("日期"); //表格名称
axisX.setTextSize(10);//设置字体大小
axisX.setMaxLabelChars(7); //最多几个X轴坐标,意思就是你的缩放让X轴上数据的个数7<=x<=mAxisXValues.length
axisX.setValues(mAxisXValues); //填充X轴的坐标名称
mData.setAxisXBottom(axisX); //x 轴在底部
//data.setAxisXTop(axisX); //x 轴在顶部
axisX.setHasLines(true); //x 轴分割线
// Y轴是根据数据的大小自动设置Y轴上限(在下面我会给出固定Y轴数据个数的解决方案)
Axis axisY = new Axis(); //Y轴
axisY.setName("钱");//y轴标注
axisY.setTextSize(10);//设置字体大小
mData.setAxisYLeft(axisY); //Y轴设置在左边
//data.setAxisYRight(axisY); //y轴设置在右边
}
3)数据绑定和图表的属性设置
private void generateData() {
List<Line> lines = new ArrayList<>();
List<PointValue> values = new ArrayList<>();
int indexX = 0;
for(Integer value : table.values()){
values.add(new PointValue(indexX, value));
indexX++;
}
Line line = new Line(values);
line.setColor(ChartUtils.COLORS[0]);
line.setShape(ValueShape.CIRCLE);
line.setPointColor(ChartUtils.COLORS[1]);
lines.add(line);
mData.setLines(lines);
setAxis();
mChart.setLineChartData(mData);
}
三、运行测试


【Android】家庭记账本手机版开发报告六的更多相关文章
- 【Android】家庭记账本手机版开发报告五
一.说在前面 昨天 1.添加菜单(查询.清除所有等)2.使用滑动删除 今天 1.创建登入和注册界面 2.向数据库添加一张用户表 问题 做完后在登入时有bug(未解决) 二.界面的搭建 1 ...
- 【Android】家庭记账本手机版开发报告二
一.说在前面 昨天 完成了对记账本的账单的增删 今天 完善昨天的框架结构( 1.引入ViewModel管理数据.使MainActive 只管理界面.不再管数据了 2.引入AsyncTask.后台执行. ...
- 【Android】家庭记账本手机版开发报告一
一.说在前面 昨天 学习了数据库的一些简单操作 今天 使用数据库,完成对记账本的账单记录的增删 问题 没有 二.数据库 1.账单表的结构 (注 id:账单的唯一标识,uid:记录账单的用户的id,co ...
- 【Android】家庭记账本手机版开发报告七
一.说在前面 昨天 实现了账单的图标显示 今天 本地化,测试APP,将工程源码放到github上 源码:https://github.com/xiaotian12-call/Android_Boo ...
- 【Android】家庭记账本手机版开发报告四
一.说在前面 昨天 对界面显示和逻辑结构进行完善 今天 1.添加菜单(查询.清除所有等) 2.使用滑动删除 问题 1.在做查询时获取SearchView时引 入包错误经过长时间的尝试后才修正 2.滑动 ...
- 【Android】家庭记账本手机版开发报告三
一.说在前面 昨天 对第一天的框架结构进行了四方面的完善 今天 对界面显示和逻辑结构进行完善 问题 无 二.界面展示完善 1.使用可回收的列表recyclerView展示账单的信息,并设置数据项为卡片 ...
- Android深度探索--HAL与驱动开发----第六章读书笔记
Linux驱动程序与其他类型的Linux程序一样拥有自己的规则,下面给出一个编写基本的Linux驱动的一般步骤: (1)建立Linux驱动的骨架(装载和卸载Linux驱动): (2)注册和注销设备文件 ...
- WPS Office手机版调用接口代码指导帖之一(Android)
经常会有一些喜欢开发鼓捣的童鞋问我们,WPS Office手机版是否提供调用接口,希望在android中使用一个调用命令,直接调用WPS手机版来打开指定的DOC文件,而不用弹出一个程序可选列表(如果用 ...
- 手机版WEB开发经验分享,手机版网站开发注意事项,网站自适应,手机版网站自适应,移动安卓APP自适应
转自 http://my.oschina.net/cart/blog/282477 做前端开发不短了,用过jQuery Mobile jqMobi 也纯手工写过.. 最后总结如下: jQuery Mo ...
随机推荐
- Go语言 | 哪些大公司在用go语言?
Go大概09年面世以来,已经8年了,也算是8年抗战.在这8年中,已经有很多公司开始使用Go语言开发自己的服务,甚至完全转向Go开发,也诞生了很多基于Go的服务和应用,比如Dokcer.k8s等,现在我 ...
- ASP.NET MVC 4 中Razor 视图中JS无法调试 (重要)
谷歌浏览器,firefox,IE 都可以 1.首先检查IE中这2个属性是否勾选了. 2.选择IE浏览器进行调试,调试方法有2种 A:采用debugger;的方法,如下图所示: 这时不用调试断点就会在d ...
- springboot打包的问题可执行jar和不可执行jar
具体解释可以参看:https://www.cnblogs.com/liaojie970/p/9007577.html 如果只是想要依赖那么可以将springboot自带的打包插件换掉就可以了,换为如下 ...
- JS enter键一键登录
$("body").keydown(function (event) { ) { //enter键键值为13 $('.finish-btn').click(); // $('.fi ...
- JavaSwing标准对话框
package test001; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import jav ...
- Day9 - K - Yue Fei's Battle HDU - 5136
Yue Fei is one of the most famous military general in Chinese history.He led Southern Song army in t ...
- 大数据萌新的Python学习之路(二)
笔记内容: 一.模块 Python越来越被广大程序员使用,越来越火爆的原因是因为Python有非常丰富和强大标准库和第三方库,几乎可以实现你所想要实现的任何功能,并且都有相应的Python库支持,比如 ...
- JAVA 集合 List 分组的两种方法
CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...
- k-近邻算法原理入门-机器学习
//2019.08.01下午机器学习算法1——k近邻算法1.k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用.2 ...
- 《ES6标准入门》(阮一峰)--12.Symbol
1.概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突.比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突.如果有一种 ...