家庭记账本安卓版开发:第五天

一、效果展示

点击第一项查看详情

修改其信息

保存修改

再次查看详情

删除该账目

二、问题

对于下拉框组件的值的从数据库获取并赋值并不清楚,还有点击事件的失效情况与布局之间的关联

三、部分原码

activity_info.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:background="@mipmap/info"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:text="账目信息"
        android:textSize="50sp"
        android:layout_gravity="center"
        android:layout_height="wrap_content"/>
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="40dp"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/update_type"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="账目类型"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/type_spin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_toRightOf="@+id/update_type" />
    </RelativeLayout>

    <EditText
        android:id="@+id/bill_money"
        android:layout_marginTop="20dp"
        android:layout_width="250dp"
        android:hint="请输入账目金额"
        android:inputType="number"
        android:layout_gravity="center"
        android:layout_height="wrap_content"/>
    <TextView
        android:id="@+id/bill_date"
        android:layout_marginTop="20dp"
        android:layout_width="250dp"
        android:hint="请输入账目日期"
        android:inputType="date"
        android:textSize="18dp"
        android:layout_gravity="center"
        android:layout_height="wrap_content"/>
    <EditText
        android:id="@+id/bill_remark"
        android:layout_width="250dp"
        android:layout_marginTop="20dp"
        android:layout_gravity="center"
        android:hint="在此处添加备注"
        android:layout_height="wrap_content"/>
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_gravity="center"
        android:layout_height="wrap_content">
    <Button
        android:id="@+id/update_btn"
        android:layout_width="wrap_content"
        android:text="保存修改"
        android:layout_gravity="left"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/delete_btn"
        android:layout_width="wrap_content"
        android:layout_toRightOf="@+id/update_btn"
        android:layout_marginLeft="20dp"
        android:text="删除该账目"
        android:layout_height="wrap_content"/>
    </RelativeLayout>
</LinearLayout>

QueryAllActivity.java

package com.example.familybook;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.Nullable;

import com.example.familybook.dao.BillDaoImpl;
import com.example.familybook.dao.IBillDao;
import com.example.familybook.entity.Bill;
import com.example.familybook.utils.ShowBillsAdapter;
import com.example.familybook.utils.ViewHolder;

import java.util.List;

public class QueryAllActivity extends Activity {
    private String mUsername;
    private String TAG="QueryAllActivity";
    private List <Bill> mShowBills;
    private List <ViewHolder> mViewHolder;
    private IBillDao mIBillDao;
    private SQLiteOpenHelper mBillDatabaseHelper;
    private ListView mShowBillList;
    private int mInfoCode=1;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        this.setTitle("总览账目信息");

        //获取登录者的用户名
        Intent intent =getIntent();
        mUsername =intent.getStringExtra("username");
        Log.e(TAG,"使用者:"+mUsername);

        //初始化控件
        initView();

        //获取表格布局
        mShowBillList=(ListView)findViewById(R.id.list_View);

        //获取从数据库获得的表单
        mShowBills=mIBillDao.listAllBill(mUsername);

        //新建并配置Show
        ShowBillsAdapter  ShowAdapter=new ShowBillsAdapter(mShowBills,this);
        mShowBillList.setAdapter(ShowAdapter);
        //添加事件监听
        initListener();
    }

    private void initListener() {
        mShowBillList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Bill bill =mShowBills.get(position);
                int bill_id=bill.get_id();
                Intent intent=new Intent();
                intent.putExtra("username",mUsername);
                intent.putExtra("bill_id",bill_id);
                intent.setClass(QueryAllActivity.this,InfoActivity.class);
                startActivityForResult(intent,mInfoCode);
            }
        });

    }

    private void initView() {
        mIBillDao =new BillDaoImpl(QueryAllActivity.this);

    }
    /**
     * 返回的结果在这里回调
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        String resultContent = null;
        //当我们判断这个请求码的时候,就知道,这是哪个界面返回的结果
        if (requestCode==mInfoCode) {
            if(resultCode==2){
                //注册成功
                Toast.makeText(this,"修改成功",Toast.LENGTH_SHORT).show();
            }else if(requestCode==3){
                //删除成功
                Toast.makeText(this,"删除成功",Toast.LENGTH_SHORT).show();
            }
        }
    }
}

InfoActivity.java

package com.example.familybook;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.Nullable;

import com.example.familybook.dao.BillDaoImpl;
import com.example.familybook.dao.IBillDao;
import com.example.familybook.entity.Bill;

import java.util.Calendar;

public class InfoActivity extends Activity {
    private Bill mBill;
    private String mUsername;
    private int mBillID;
    private int mYear;
    private int mMonth;
    private int mDay;
    private TextView mTypeSpin;
    private EditText mMoney;
    private TextView mDate;
    private EditText mRemark;
    private Button mUpdateBillBtn;
    private Button mDeleteBillBtn;
    private IBillDao mIBillDao;
    private String mTypeText;
    private String TAG="InfoActivity";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_info);

        //获取登录者的用户名
        Intent intent =getIntent();
        mUsername =intent.getStringExtra("username");
        mBillID =intent.getIntExtra("bill_id",mBillID);

        Log.e(TAG,"使用者:"+mUsername);
        Log.e(TAG,"账单号:"+mBillID);

        //获取时间
        initDate();

        //初始化控件
        initView();

        //从数据库获取信息,并完成信息初始化
        mBill=mIBillDao.QueryBill(mBillID);
        initInfo();
        //添加监听事件
        initListener();
    }

    private void initInfo() {
        mTypeSpin.setText(mBill.getType());
        mMoney.setText(mBill.getMoney());
        mDate.setText(mBill.getDate());
        mRemark.setText(mBill.getRemark());
    }

    private void initDate() {
        //获取当前时间
        Calendar ca = Calendar.getInstance();
        mYear = ca.get(Calendar.YEAR);
        mMonth = ca.get(Calendar.MONTH);
        mDay = ca.get(Calendar.DAY_OF_MONTH);
    }

    private void initListener() {

        mDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //调用时间选择器
                DatePickerDialog datePickerDialog = new DatePickerDialog(InfoActivity.this, R.style.MyDatePickerDialogTheme, onDateSetListener, mYear, mMonth, mDay);
                //获取时间戳
                long timeStamp = System.currentTimeMillis();
                //设置可以显示的最晚的时间
                datePickerDialog.getDatePicker().setMaxDate(timeStamp);
                //弹框
                datePickerDialog.show();
            }
        });
        mDeleteBillBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                deleteBill();
            }
        });
        mUpdateBillBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updateBill();
            }
        });

    }

    /**
     * 进行修改
     */
    private void updateBill() {
        Bill bill=null;
        //获取账目类型
        mTypeText=mTypeSpin.getText().toString().trim();
        //获取账目金额
        String moneyText=mMoney.getText().toString().trim();
        //获取日期
        String  date= mDate.getText().toString().trim();
        //获取备注
        String remarkText=mRemark.getText().toString().trim();
        if(TextUtils.isEmpty(moneyText)){
            //账目金额为空
            Toast.makeText(this,"账目金额不可以为空",Toast.LENGTH_SHORT).show();
            return;
        }else if(TextUtils.isEmpty((CharSequence) date)){
            //账目日期为空
            Toast.makeText(this,"账目日期不可以为空",Toast.LENGTH_SHORT).show();
            return;
        }else {
            Log.e(TAG, "账户:" + mUsername);
            Log.e(TAG, "类型:" + mTypeText);
            Log.e(TAG, "金额:" + moneyText);
            Log.e(TAG, "日期:" + date);
            Log.e(TAG, "备注:" + remarkText);
            bill=new Bill(mUsername,mTypeText,moneyText,date,remarkText);
            boolean rs=mIBillDao.Update(mBillID,bill);
            Log.e(TAG,"rs:"+rs);
            if (rs ) {
                //修改成功,跳回账页
                Intent intent = new Intent();
                setResult(2, intent);
                finish();
            }
        }
    }

    /**
     * 进行删除
     */
    private void deleteBill() {
        boolean rs=mIBillDao.DeleteBill(mBillID);
        if(rs){
            //删除成功,跳回账页
            Intent intent = new Intent();
            setResult(3, intent);
            finish();
        }

    }

    /**
     * 日期选择器对话监听
     */
    private DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            mYear = year;
            mMonth = monthOfYear;
            mDay = dayOfMonth;

            String days;
            if (mMonth + 1 < 10) {
                if (mDay < 10) {
                    days = new StringBuffer().append(mYear).append("-").append("0").
                            append(mMonth + 1).append("-").append("0").append(mDay).append("").toString();
                } else {
                    days = new StringBuffer().append(mYear).append("-").append("0").
                            append(mMonth + 1).append("-").append(mDay).append("").toString();
                }

            } else {
                if (mDay < 10) {
                    days = new StringBuffer().append(mYear).append("-").
                            append(mMonth + 1).append("-").append("0").append(mDay).append("").toString();
                } else {
                    days = new StringBuffer().append(mYear).append("-").
                            append(mMonth + 1).append("-").append(mDay).append("").toString();
                }

            }

            mDate.setText(days);
        }
    };

    private void initView() {
        mTypeSpin =(TextView) this.findViewById(R.id.type_spin);
        mMoney =(EditText)this.findViewById(R.id.bill_money);
        mDate =(TextView) this.findViewById(R.id.bill_date);
        mRemark=(EditText)this.findViewById(R.id.bill_remark);
        mUpdateBillBtn=(Button)this.findViewById(R.id.update_btn);
        mDeleteBillBtn=(Button)this.findViewById(R.id.delete_btn);
        mIBillDao  =new BillDaoImpl(InfoActivity.this);
    }
}

原文地址:https://www.cnblogs.com/yeyueweiliang/p/12305426.html

时间: 2024-11-03 13:11:11

家庭记账本安卓版开发:第五天的相关文章

家庭记账本安卓版开发:第六天

一.成果展示 今天在昨天的基础上,做了一些完善,在数据库中添加了一列int型数据position,用于获取Spinner组件的value值对应的position值,加以保存读取,来实现将取值赋给Spinner组件的默认值,成功实现了下拉框的数据读取显示,进而实现了下拉框对应数据,也就是账目类型的修改,解决了一些bug,关于Activity的生命周期进行了调整,以避免了按返回键时会跳转回上一个画面,而不是它对应的上一级Activity,还解决了如果对数据进行多次查看详细信息,进行修改时,返回原Ac

安卓驱动开发(五)----搭建开发板的测试环境

在第四章中,介绍的是安卓应用程序开发环境和linux内核开发环境.这两套开发环境都是linux开发和测试的前提.有了两套开发环境,接下来就应该考虑,测试好的linux驱动应该在哪里运行,运行环境是什么.这也就是第五章的内容. 当一个已经完成测试的linux驱动放到一块开发板上时,开发板也同样要有一个允许linux驱动运行的环境,在这里就是用安卓来满足这一要求. 当拿到一个开发板的时候,首先要使用一种方法,与开发板进行数据传输,将所需要的开发环境放到开发板上.在书上用的是SD卡方式,也就是刷机时所

家庭记账本开发记录(1)

这个寒假前面的时间一直在学习web前端,因为之前开发JavaWeb时,一些界面应用太粗糙,所以利用前段时间系统了解了一下前端技术,以便接下来后端开发的界面美观.再就是今天的关于家庭记账本软件的开发,确定了一下设计思路,其中主要是对数据库的操作比较重要,因为记账的收入支出需要进行数据汇总,一段时间以后用可视化数据报表进行呈现.对收入支出的费用又各有分类,收入有薪资.理财.红包.借入.收债.其他,支出消费.餐饮.购物.住房.交通.通讯.娱乐.医疗.教育.红包.旅行.投资.借出.还债.其他,至于对数据

微信小程序家庭记账本开发进度五

我们要做的事一个家庭记账本的微信小程序,首先,先对app.json,进行编译 { "pages": [ "pages/index/index", "pages/item/item" ], "window": { "backgroundTextStyle": "dark", "navigationBarBackgroundColor": "#fff"

屌丝也能开发安卓版2048(App Inventor)

想编写安卓游戏,java太难,来试试App Inventor,虽然有人认为他是中学生的玩具,但是也能编写2048这样的火爆游戏,不需要太复杂的算法. 整个游戏有几个模块: 一.游戏初始化 数列转化为图形,使用了canvas和精灵,相对应list,这里注意精灵位置是固定的,只是更改图片,多少分,就对于n.jpg,0分是底色图片.左右移动,使用了flung判断,绝对值判断,水平速度和垂直速度哪个大,用来判断是左右移动还是上下移动. 二.计分模块 一般计分在合并处增加,最高分用了tiny db,游戏结

从零开始开发Android版2048 (五) 撤销的实现

本篇的内容是,在前一篇的基础上加入了撤销的功能.撤销其实就是将当前的用户界面恢复到这次滑动值前的样子.我实现撤销的主要原理是,将每次滑动后界面上的格子和对应的数字记录下来,当然还有分数,把这些数据写入一个栈中,然后点击撤销操作的时候,将栈顶pop掉,读取下一个栈中的对象,并根据对象中存储的数据重新绘制界面. 下面是我用于存储每次界面情况的类,在这个类中保存了界面中主要的三个数据,空白格.数字格和当前的分数. package com.example.t2048; import java.util.

钢铁少女 无限钻石安卓版下载 和 源代码部署成功

本文中所有资料.资源文件仅供技术学习.研究之用,请必须在24小时内删除所下载文件,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担.本文中的网游信息.网游源代码资源均来自互联网,非本站开发.如有侵犯您的合法权益请来信告之,我们会在三个工作日内予以清除.<钢铁少女>(战舰少女2.0)的源代码部署成功,欢迎试玩. 无限钻石安卓版下载 http://pan.baidu.com/s/1i4hfG9J客户端源代码 http://pan.baidu.com/s/1o74CgjS服务器

20165317实验四 安卓程序开发

实验四 安卓程序开发 提交点一 任务: Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章: 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECANDROID,安装 Android Stuidio 完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号,自己学号前后一名同学的学号,提交代

【热门APP用户体验分析】购物类APP之王——淘宝安卓版(二)

在上一篇的文章中,简单的介绍了一下淘宝客户端的首页的导航栏,还有一些小的细节问题,这一篇,我们还是继续剖析淘宝客户端安卓版. 我们首先还是先放出淘宝的主界面 在这个界面中,最上方是一个广告栏,可以点击进入对应的活动界面.广告栏可以手动的滑动,而且滑动体验非常好,在使用其他软件的时候,会发生左右广告栏的滑动和上下的刷新滑动出现冲突的情况,表现出来就是界面一直在颤动,但是淘宝的广告栏做的非常好,只要在广告栏的区域滑动,触摸焦点就会被锁定,不会发生手势冲突的情况,淘宝的开发者应该是重写了控件的触摸事件