ListView+ SQLite实现商品展示

1.首先是UI界面

ListView+ SQLite实现商品展示_第1张图片

    建立ListView中子项的布局(在layout下建立item.xml)

ListView+ SQLite实现商品展示_第2张图片


2.创建需要用到的java类文件(项目结构如下)

ListView+ SQLite实现商品展示_第3张图片

i.DBHelper

DBHelper需要继承SQLiteOpenHelper类:
包含两个方法:
public void onCreate(SQLiteDatabase db)创建数据库
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 数据库升级

ii .Account

Account中封装了每一条记录的属性:
属性包含:id、 name、balance
同时生成构造方法、toString、Get和Set方法

iii.AccountDao

AccountDao提供了对数据库操作的方法:
包含:CRUD方法

  • 简单介绍一个Create方法

    public void insert(Account account){
            //传入Account 对象
            //读取数据库对象
            SQLiteDatabase db=helper.getWritableDatabase();
            //用来装载要插入的数据的键值对
            ContentValues values=new ContentValues();
            values.put("name",account.getName());            //获取名字
            values.put("balance",account.getBalance());      //获取金额
            //向account表插入数据values
            long id=db.insert("account",null,values);
            account.setId(id); //得到id
            db.close();//关闭数据库
        }
    

iiii.MainActivity

MainActivity:
属性包含:按钮的监听事件以及对方法的调用

  • 简单介绍一下主要的思路:
//初始化函数
protected void onCreate(Bundle savedInstanceState) {
                        super.onCreate(savedInstanceState);
                        setContentView(R.layout.activity_main);
                        //获取添加行的控件对象以及添加事件的监听
                        initView();
                        dao = new AccountDao(this);
                        //从数据库查询所有数据
                        list = dao.queryAll();
                        adapter = new MyAdapter();
                        accountLV.setAdapter(adapter);//给ListView添加适配器(自动把数据生成条目)
        } 
       //inageview的点击事件触发的方法(添加数据)
public void add(View v) {
        String name = nameET.getText().toString().trim();
        String balance = balanceET.getText().toString().trim();
        //判断输入内容是否为空若为空不允许添加并Toast提示
        if("".equals(name)||"".equals(balance)) {
            Toast.makeText(getApplicationContext(), "商品名和金额不能为空", Toast.LENGTH_SHORT).show();
            return;
        }
        //三目运算balance.equals("")则等于0
        //如果balance不是空字符串,则进行强制类型转换
        Account a = new Account(name, balance.equals("") ? 0 : Integer.parseInt(balance));
        dao.insert(a);//插入数据库
        list.add(a);//插入集合
        adapter.notifyDataSetChanged();//刷新界面
        //选中最后一个
        accountLV.setSelection(accountLV.getCount() - 1);
        nameET.setText("");
        balanceET.setText("");
    }
 public View getView(int position, View convertView, ViewGroup parent) {
            //重用converView
            View item = convertView != null ? convertView : View.inflate(getApplicationContext(), R.layout.item, null);
            //获取该视图中的textview
            TextView idTV = (TextView) item.findViewById(R.id.idTV);
            TextView nameTV = (TextView) item.findViewById(R.id.nameTV);
            TextView balanceTV = (TextView) item.findViewById(R.id.balanceTV);
            //根据当前位置获取Account对象
            final Account a = list.get(position);
            //把Account对象中的数据放到textview中
            idTV.setText(a.getId() + "");
            nameTV.setText(a.getName());
            balanceTV.setText(a.getBalance() + "");
            ImageView upTV = (ImageView) item.findViewById(R.id.upIV);
            ImageView downTV = (ImageView) item.findViewById(R.id.downIV);
            ImageView deleteTV = (ImageView) item.findViewById(R.id.deleteIV);
            //向上箭头的事件触发方法
            upTV.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    a.setBalance(a.getBalance() + 1);
                    notifyDataSetChanged();
                    dao.update(a);
                }
            });
            //向下箭头的事件触发方法
            downTV.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    a.setBalance(a.getBalance() - 1);
                    notifyDataSetChanged();
                    dao.update(a);
                }
            });
            //删除图片的点击事件触发的方法
            deleteTV.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //删除数据之前首先弹出一个对话框
                    android.content.DialogInterface.OnClickListener listener =
                            new android.content.DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    list.remove(a);//从集合删除
                                    dao.delete(a.getId());//从数据库删除
                                    notifyDataSetChanged();//刷新界面
                                }
                            };
                    //创建对话框
                    Builder builder = new Builder(MainActivity.this);
                    builder.setTitle("确定要删除吗?");           //设置标题
                    //设置确定按钮的文本以及监听器
                    builder.setPositiveButton("确定", listener);
                    builder.setNegativeButton("取消", null);
                    builder.show();
                }
            });
            return item;
        }

3.运行测试

ListView+ SQLite实现商品展示_第4张图片

    项目案例下载:链接:http://pan.baidu.com/s/1c2N7jqw 密码:87o3
    (无力吐槽CSDN资源上传真是重重困难)

你可能感兴趣的:(发送到)