zoukankan      html  css  js  c++  java
  • 实战演练-记账本App(三)

     继上一篇内容,今天继续完成家庭记账本app的开发。

    今天主要完成了有关支出功能的相关操作,实现了新的支出添加、删除、退出功能

    一、数据库等创建

    1、创建CostBean.java

    package com.example.mm;
    
    public class CostBean {
        public String costTitle;
        public String costDate;
        public String costMoney;
    }

    2、创建CostListAdapter.java继承BaseAdapter

    package com.example.mm;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.TextView;
    
    import java.util.List;
    
    public class CostListAdapter extends BaseAdapter {
    
    
        private List<CostBean> mList;
        public Context mContext;
        private LayoutInflater mlayoutInflater;
    
    
        public CostListAdapter(Context context,List<CostBean>list){
            mContext =context;
            mList=list;
            mlayoutInflater=LayoutInflater.from(context);
        }
    
        @Override
        public int getCount() {
            return mList.size();
        }
    
        @Override
        public Object getItem(int position) {
            return mList.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder;
            if(convertView==null){
                viewHolder=new ViewHolder();
                convertView=mlayoutInflater.inflate(R.layout.list_item,null);
                viewHolder.mTvCostTitle=convertView.findViewById(R.id.tv_title);
                viewHolder.mTvCostDate=convertView.findViewById(R.id.tv_date);
                viewHolder.mTvCostMoney=convertView.findViewById(R.id.tv_cost);
                convertView.setTag(viewHolder);
            }else{
                viewHolder=(ViewHolder)convertView.getTag();
            }
            CostBean bean=mList.get(position);
            viewHolder.mTvCostTitle.setText(bean.costTitle);
            viewHolder.mTvCostDate.setText(bean.costDate);
            viewHolder.mTvCostMoney.setText(bean.costMoney);
            return convertView;
        }
    
        private static class ViewHolder{
            public TextView mTvCostTitle;
            public TextView mTvCostDate;
            public TextView mTvCostMoney;
        }
    }

    3、创建DatabaseHelper.java文件 也就是数据库的创建以及相关操作

    package com.example.mm;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    import androidx.annotation.Nullable;
    
    
    public class DatabaseHelper extends SQLiteOpenHelper {
    
    
        public static final String COST_TITLE = "cost_title";
        public static final String COST_DATE = "cost_date";
        public static final String COST_MONEY = "cost_money";
        public static final String IMOOC_COST = "imooc_cost";
    
        public DatabaseHelper(@Nullable Context context) {
            super(context, "imooc_daily",null , 1);
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("create table if not exists imooc_cost("+
                    "id integer primary key,"+
                    "cost_title varchar,"+
                    "cost_date varchar,"+
                    "cost_money varchar)");
        }
    //数据录入
        public void insertCost(CostBean costBean){
            SQLiteDatabase database=getWritableDatabase();
            ContentValues cv=new ContentValues();
            cv.put(COST_TITLE,costBean.costTitle);
            cv.put(COST_DATE,costBean.costDate);
            cv.put(COST_MONEY,costBean.costMoney);
            database.insert(IMOOC_COST, null, cv);
        }
    //显示所有数据
        public Cursor getAllCostData(){
            SQLiteDatabase database=getWritableDatabase();
            return database.query(IMOOC_COST,null,null,null,null,null,COST_DATE +" ASC");
        }
    //删除数据
        public void deleteAllData(){
            SQLiteDatabase database=getWritableDatabase();
            database.delete(IMOOC_COST,null,null);
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
        }
    }

    4、接下来就要在SkipActivity.java文件进行相关的相关的操作了。

    package com.example.mm;

    import android.app.DatePickerDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;

    import com.google.android.material.snackbar.Snackbar;

    import androidx.appcompat.app.AlertDialog;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.appcompat.widget.Toolbar;

    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.Button;
    import android.widget.DatePicker;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;

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

    public class SkipActivity extends AppCompatActivity {

    private List<CostBean> mCostBeanList;
    private DatabaseHelper mDatabaseHelper;
    private CostListAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mCostBeanList = new ArrayList<>();
    mDatabaseHelper = new DatabaseHelper(this);
    ListView costList = (ListView) findViewById(R.id.lv_main);
    mAdapter = new CostListAdapter(this, mCostBeanList);
    costList.setAdapter(mAdapter);
    initCostData();
    //删除所有
    Button del = (Button) findViewById(R.id.del);
    del.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    creatdialog();
    }
    });
    //退出
    Button tui = (Button) findViewById(R.id.tui);
    tui.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    dialog();
    }
    });

    //添加
    Button btn2 = (Button) findViewById(R.id.btn2);
    btn2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    AlertDialog.Builder builder = new AlertDialog.Builder(SkipActivity.this);
    LayoutInflater inflater = LayoutInflater.from(SkipActivity.this);
    View viewDialog = inflater.inflate(R.layout.new_cost_data, null);
    final EditText title = (EditText) viewDialog.findViewById(R.id.et_cost_title);
    final EditText money = (EditText) viewDialog.findViewById(R.id.et_cost_money);
    final DatePicker date = (DatePicker) viewDialog.findViewById(R.id.dp_cost_date);
    builder.setView(viewDialog);
    builder.setTitle("新支出");
    builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    CostBean costBean = new CostBean();
    costBean.costTitle = title.getText().toString();
    costBean.costMoney = money.getText().toString();
    costBean.costDate = date.getYear() + "-" + (date.getMonth() + 1) + "-" + date.getDayOfMonth();
    mDatabaseHelper.insertCost(costBean);
    mCostBeanList.add(costBean);
    mAdapter.notifyDataSetChanged();
    }
    });
    builder.setNegativeButton("取消", null);
    builder.create().show();
    }
    });
    }

    private void initCostData() {
    //mDatabaseHelper.deleteAllData();
    // for (int i=0;i<6;i++) {
    // CostBean costBean=new CostBean();
    // costBean.costTitle=i+"mock";
    // costBean.costMoney="20";
    // mDatabaseHelper.insertCost(costBean);
    // }
    Cursor cursor = mDatabaseHelper.getAllCostData();
    if ( cursor != null ) {
    while (cursor.moveToNext()) {
    CostBean costBean = new CostBean();
    costBean.costTitle = cursor.getString(cursor.getColumnIndex("cost_title"));
    costBean.costDate = cursor.getString(cursor.getColumnIndex("cost_date"));
    costBean.costMoney = cursor.getString(cursor.getColumnIndex("cost_money"));
    mCostBeanList.add(costBean);

    }
    cursor.close();
    }
    }

    private void creatdialog() {
    AlertDialog.Builder b = new AlertDialog.Builder(SkipActivity.this);

    //设置提示框内容
    b.setMessage("确认删除?");
    //设置标题栏
    b.setTitle("提示");
    b.setPositiveButton("确认", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int which) {
    mDatabaseHelper.deleteAllData();
    finish();
    Toast.makeText(SkipActivity.this, "删除成功", Toast.LENGTH_SHORT).show();
    }
    }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    Toast.makeText(SkipActivity.this, "删除失败", Toast.LENGTH_SHORT).show();
    dialog.dismiss();
    }
    });
    b.create().show();
    }

    private void dialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(SkipActivity.this);
    builder.setMessage("确认要退出么?");
    builder.setTitle("提示");
    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {

    dialog.dismiss();
    Toast.makeText(SkipActivity.this, "退出成功", Toast.LENGTH_SHORT).show();
    finish();
    }
    });
    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    dialog.dismiss();
    }
    });
    builder.show();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if ( id == R.id.action_settings ) {
    return true;
    }

    return super.onOptionsItemSelected(item);
    }
    }

    效果图:

     以上就是今天所完成的内容。。。

  • 相关阅读:
    排序算法(六)快速排序
    排序算法(五)归并排序
    排序算法(四)堆排序
    排序算法(三)插入排序
    排序算法(二)选择排序
    sizeof strlen 求char*字符串的长度
    剑指offer 按之字型顺序打印二叉树
    剑指offer 对称的二叉树
    剑指offer 二叉树的下一个结点
    剑指offer 删除链表中重复的结点
  • 原文地址:https://www.cnblogs.com/MoooJL/p/12210427.html
Copyright © 2011-2022 走看看