• 【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);
        }

    三、运行测试

  • 相关阅读:
    矩阵快速幂 HDU3483
    欧拉函数 求小于某个数并与其互质的数的个数
    扩展欧几里德算法求逆元3
    拓展欧几里德算法求逆元2
    【20140113-2】MyEclipse生成javadoc时出错:编码GBK的不可映射字符
    【131202】SQL
    【20140113】package 与 import
    系统架构等级
    ora-01658 :无法为表空间USERS 中的段创建INITIAL区
    WMSYS.WM_CONCAT 函數的用法
  • 原文地址:https://www.cnblogs.com/20183544-wangzhengshuai/p/12238470.html
Copyright © 2020-2023  润新知