家庭记账本安卓版开发:第五天
一、效果展示

点击第一项查看详情

修改其信息

保存修改

再次查看详情

删除该账目

二、问题
对于下拉框组件的值的从数据库获取并赋值并不清楚,还有点击事件的失效情况与布局之间的关联
三、部分原码
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);
}
}