安卓开发实战-记账本APP(四)

今天实现的内容有:添加账本信息,个人头像的切换,密码的修改,退出登录。

添加账本信息有三个功能:

①记一笔支出项目

②记一笔收入项目

③清空所有项目

在此期间遇到的困难有:Activity与Fragment之间数值的传递问题,我利用Bundle对象来进行传值,但是布局文件中fragment里的name=“Account_Fragment”,这里暂时没有想到如何传值。

因此暂时将name="Find_Message"这个还未改变的一个fragment,当再次点击Account图标时,就可以传进去参数。

未解决的事:

①记完账本后,按日期排序一直不对

②初始Fragment没办法传参

明天要做的事:

先将上述问题解决,在设置长按项目进行单独删除。

统计总的收入与支出的对比

找到合适的图标进行替换

学习hellochart,将数据以饼状图展示。

今日成果:

点击更换头像:会有几个头像供选择

当点击后自动跳回个人信息界面:

其次是更换密码:需要输入原密码与新密码

再者就是记账的页面:有支出,收入,删除所有,支出的会显示红色,收入的会显示绿色

当点击收入时,会弹出一个框来进行记账

同理,当点击支出时,也会弹出一个框

当点击删除所有时,会将所有账目全部删除。

Account_Fragment:记账的Fragment

package com.example.countbook;

import android.app.AlertDialog;
import android.app.Fragment;
import android.content.DialogInterface;
import android.database.Cursor;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RadioButton;

import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;

public class Account_Fragment extends Fragment {
    private List<Account> list;
    private AccountOperator accountOperator;
    private AccountAdapter accountAdapter;
    Button btn_shouru;
    Button btn_zhichu;
    Button btn_delete;
    Bundle bundle;
    String username;
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        bundle=getArguments();
        username=bundle.getString("username");
        //Log.i("username",username);
    }
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.account_fragment,null);
        btn_shouru=(Button)view.findViewById(R.id.btn_shouru);
        btn_zhichu=(Button)view.findViewById(R.id.btn_zhichu);
        btn_delete=(Button)view.findViewById(R.id.btn_delete);

        accountOperator=new AccountOperator(view.getContext());
        list=new ArrayList<>();
        ListView AccountList=(ListView)view.findViewById(R.id.lv_main);
        inin(username);
        accountAdapter=new AccountAdapter(view.getContext(),list);
        AccountList.setAdapter(accountAdapter);
        btn_zhichu.setOnClickListener(l);
        btn_shouru.setOnClickListener(l);
        btn_delete.setOnClickListener(l);
        return view;
    }
    View.OnClickListener l=new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_zhichu:
                    AlertDialog.Builder builder=new AlertDialog.Builder(getView().getContext());
                    LayoutInflater inflater=LayoutInflater.from(getView().getContext());
                    View viewDialog=inflater.inflate(R.layout.new_cost_data,null);
                    final EditText content=(EditText)viewDialog.findViewById(R.id.et_cost_content);
                    final DatePicker data=(DatePicker)viewDialog.findViewById(R.id.dp_cost_data);
                    final EditText money=(EditText)viewDialog.findViewById(R.id.et_cost_money);
                    final RadioButton rb1=(RadioButton)viewDialog.findViewById(R.id.rb1);
                    final RadioButton rb2=(RadioButton)viewDialog.findViewById(R.id.rb2);
                    final RadioButton rb3=(RadioButton)viewDialog.findViewById(R.id.rb3);
                    final RadioButton rb4=(RadioButton)viewDialog.findViewById(R.id.rb4);

                    builder.setView(viewDialog);
                    builder.setTitle("New Cost");
                    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Account bean=new Account();
                            bean.author=username;
                            bean.content=content.getText().toString();
                            bean.money=Integer.parseInt(money.getText().toString());
                            bean.date=data.getYear()+"-"+(data.getMonth()+1)+"-"+data.getDayOfMonth();
                            if(rb1.isChecked()){
                                bean.title=rb1.getText().toString();
                            }else if(rb2.isChecked()){
                                bean.title=rb2.getText().toString();
                            }else if(rb3.isChecked()){
                                bean.title=rb3.getText().toString();
                            }else if(rb4.isChecked()){
                                bean.title=rb4.getText().toString();
                            }
                            accountOperator.insert(bean);
                            list.add(bean);
                            accountAdapter.notifyDataSetChanged();
                        }
                    });
                    builder.setNegativeButton("Cancel",null);
                    builder.create().show();
                    break;

                case R.id.btn_shouru:
                    AlertDialog.Builder builder2=new AlertDialog.Builder(getView().getContext());
                    LayoutInflater inflater2=LayoutInflater.from(getView().getContext());
                    View viewDialog2=inflater2.inflate(R.layout.new_income_data,null);
                    final EditText content2=(EditText)viewDialog2.findViewById(R.id.et_income_content);
                    final DatePicker data2=(DatePicker)viewDialog2.findViewById(R.id.dp_income_data);
                    final EditText money2=(EditText)viewDialog2.findViewById(R.id.et_income_money);
                    final RadioButton frb1=(RadioButton)viewDialog2.findViewById(R.id.rb1);
                    final RadioButton frb2=(RadioButton)viewDialog2.findViewById(R.id.rb2);
                    final RadioButton frb3=(RadioButton)viewDialog2.findViewById(R.id.rb3);

                    builder2.setView(viewDialog2);
                    builder2.setTitle("New InCome");
                    builder2.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Account bean=new Account();
                            bean.author=username;
                            bean.content=content2.getText().toString();
                            bean.money=Integer.parseInt(money2.getText().toString());
                            bean.date=data2.getYear()+"-"+(data2.getMonth()+1)+"-"+data2.getDayOfMonth();
                            if(frb1.isChecked()){
                                bean.title=frb1.getText().toString();
                            }else if(frb2.isChecked()){
                                bean.title=frb2.getText().toString();
                            }else if(frb3.isChecked()){
                                bean.title=frb3.getText().toString();
                            }
                            accountOperator.insert(bean);
                            list.add(bean);
                            accountAdapter.notifyDataSetChanged();
                        }
                    });
                    builder2.setNegativeButton("Cancel",null);
                    builder2.create().show();
                    break;
                case R.id.btn_delete:
                    accountOperator.deleteall(username);
                    list.clear();
                    accountAdapter.notifyDataSetChanged();
                    break;

            }
        }
    };

    private void inin(String author) {
        Cursor cursor= (Cursor) accountOperator.findall(author);
        if(cursor!=null){
            while(cursor.moveToNext()){
                Account bean=new Account();
                bean.content=cursor.getString(cursor.getColumnIndex("content"));
                bean.money=cursor.getInt(cursor.getColumnIndex("money"));
                bean.date=cursor.getString(cursor.getColumnIndex("date"));
                bean.title=cursor.getString(cursor.getColumnIndex("title"));
                list.add(bean);
            }
            cursor.close();
        }
    }
}

原文地址:https://www.cnblogs.com/xiaofengzai/p/12293427.html

时间: 2024-10-10 09:31:11

安卓开发实战-记账本APP(四)的相关文章

安卓开发实战-记账本APP(五)

今天将昨天剩余的bug修复,并且完成图标的美化,设置长按删除,模仿支付宝实现金额的动态增加. ①将昨天的布局进行了修改:之前是fragment,改成FrameLayout布局,不再设置name,进而在MainActivity就多了一步 就是先给记账Fragment(也就是Account_Fragment)传递数据并进行布局的切换,由此实现了将用户名的信息传递给第一个Fragment,其他的皆可由点击事件进行传递. //将数据传入到第一个记账Account_Fragment同时将fragment进

android开发实战-记账本APP(一)

记账本开发流程: 对于一个记账本的初步开发而言,我实现的功能有: ①实现一个记账本的页面 ②可以添加数据并更新到页面中 ③可以将数据信息以图表的形式展现 (一)首先,制作一个记账本的页面. ①在系统自动创建的content_main.xml文件中添加listview <ListView android:id="@+id/lv_main" android:layout_width="wrap_content" android:layout_height=&quo

家庭版记账本app进度之对于按钮的点击事件以及线性布局以及(alertdialog)等相关内容的应用测试

通过线性布局,制作出连个按钮还有文本输入框以及嘴上放的标题文本进行信息的相关显示,完后最后的信息的输入,之后在屏幕的的下方进行显示 当点击第一个按钮的时候,在下方就会简单的出现你自己刚刚输入的相关信息.主要是训练的是对于客户输入信息的一个简单的获取, 并进行比较见得的在屏幕上输出.具体的结果截屏如下: 最后对alertdialog进行相关的应用 AlertDialog可以在当前页面弹出一个对话框,在所有界面元素之上,可以屏蔽掉界面其他控件的交互能力,因此AlertDialog一般用于提示一些非常

家庭记账本app进度之下拉框和数字转轮的相关应用

这次主要是悬系的下拉框Spinner和数字转轮NumberPicker的使用.先分析相关的用到的知识点. 在Android中,用string-array是一种简单的提取XML资源文件数据的方法. 例子如下: 把相应的数据放到values文件夹的arrays.xml文件里 <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="city&quo

家庭记账本app进度之ui相关概念控制ui界面与布局管理

ui就是用户界面设计的意思. 首先是view,view相当于窗户上的玻璃. 1.android:id属性.android:id="@+id/user".他的id是user前面的@+id是固定的写法. 2.android.background.当应用图片资源的时候这样写需要经名字为bg的相关图片般存在mi pmap这个里面才可以使用. 这样是设置背景颜色.后边是16进制的颜色 3.android.padding属性设置上下左右四个方向的内边距 这样写就是上下左右都一样这是分别进行设置的.

家庭记账本app进度之android中AlertDialog的相关应用以及对日期时间的相关操作(应用alertdialog使用的谈话框)

对于AlertDialog的相关知识: 1.创建构造器AlertDialog.Builder的对象:    2.通过构造器对象调用setTitle.setMessage.setIcon等方法构造对话框的标题.信息和图标等内容:    3.根据需要调用setPositive/Negative/NeutralButton()方法设置正面按钮.负面按钮和中立按钮:    4.调用构造器对象的create方法创建AlertDialog对象:    5.AlertDialog对象调用show方法,让对话框

进度2_家庭记账本App

今天在昨天的基础上,相继完成了三个页面的布局和显示情况: 新增加的xml文件如下: activity_add.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/a

家庭记账本app实现登录注册界面以及仿微信操作界面(共4个实现一个)遇到了麻烦

今天学习了数据的创建,以及关于数据库的相关操作. 今天主要是实现了对于数据库的增加和查找. 具体的代码如下: 首先是数据库的创建: DBOpenMessage.java package com.example.thetrueappwen; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; im

安卓开发之实现第三方APP跳转

自己创建一个按钮: <Button android:id="@+id/btn_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="******"/> 实现方法: btn_button.setOnClickListener(new View.OnClickListener() { @