精华内容
下载资源
问答
  • 商品展示案例

    2017-05-21 21:21:23
    开发一个购物车,需要将购物车车中的商品列表的形式展示,并且还需要对购物车中的商品进行增删改查操作。 二、训练目标 掌握SQLite存储方式  掌握如何使用SQLite完成CRUD操作 三、案例实现 1、商品展示案例对应...

    一、实验目的

    开发一个购物车,需要将购物车车中的商品以列表的形式展示,并且还需要对购物车中的商品进行增删改查操作。

    二、训练目标

    <1> 掌握SQLite存储方式

           <2> 掌握如何使用SQLite完成CRUD操作

    三、案例实现

    1、商品展示案例对应的布局文件activity_main.xml如下

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.example.bz0209.myapplication.MainActivity">
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
    
            <EditText
                android:id="@+id/etName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:hint="商品名称"
                android:inputType="text" />
    
    
            <EditText
                android:id="@+id/etNumber"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:hint="商品数量"
                android:inputType="number" />
    
    
            <ImageView
                android:id="@+id/ivAdd"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="addGoods"
                android:src="@android:drawable/ic_input_add" />
        </LinearLayout>
    
    
        <ListView
            android:id="@+id/lvGoods"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
    
    2、由于本案例应用到ListView布局,因此需要编写一个ListViewItem的布局,item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/tvId"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="1"
            android:textSize="20sp" />
    
        <TextView
            android:id="@+id/tvName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="商品名称"
            android:textSize="20sp" />
    
        <TextView
            android:id="@+id/tvAmount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="商品数量"
            android:textSize="20sp" />
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
    
            <ImageView
                android:id="@+id/ivUp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@android:drawable/arrow_up_float" />
    
            <ImageView
                android:id="@+id/ivDown"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@android:drawable/arrow_down_float" />
        </LinearLayout>
    
        <ImageView
            android:id="@+id/ivDelete"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:src="@android:drawable/ic_menu_delete" />
    </LinearLayout>

    3、创建数据库DBHelper继承SQLiteOpenHelper

    package com.example.bz0209.myapplication.db;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    
    public class DBHelper extends SQLiteOpenHelper {
        private static final String CREATE_GOODS="create table goods(_id integer primary autoincrement ,name varchar(20),amount integer)";
        public DBHelper(Context context, int version) {
            super(context,"goods.db",null, version);
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_GOODS);
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    
        }
    }
    4、创建商品类Goods

    package com.example.bz0209.shop.entity;
    
    
    public class Goods {
        private long id;
        private String name;
        private int amount;
        public Goods(long id,String name,int amount){
            super();
            this.id=id;
            this.name=name;
            this.amount=amount;
        }
        public long getId() {
            return id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAmount() {
            return amount;
        }
    
        public void setAmount(int amount) {
            this.amount = amount;
        }
        public Goods(String name,int amount){
            super();
            this.name=name;
            this.amount=amount;
        }
        public Goods(){
            super();
        }
        public String toString(){
            return "[序号:"+id+",商品名称:"+name+",余额:"+amount+"]";
        }
    }
    5、创建数据库库逻辑类

    package com.example.bz0209.myapplication.dao;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    
    import com.example.bz0209.myapplication.db.DBHelper;
    import com.example.bz0209.myapplication.entity.Goods;
    
    import java.sql.SQLData;
    import java.util.ArrayList;
    import java.util.List;
    
    public class GoodsDao {
        private DBHelper dbHelper;
        public GoodsDao(Context context){
            dbHelper=new DBHelper(context,1);
        }
        public void add(Goods goods){
            SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
            ContentValues values=new ContentValues();
            values.put("name",goods.getName());
            values.put("amount",goods.getAmount());
            long id=sqLiteDatabase.insert("goods",null,values);
            goods.setId(id);
            sqLiteDatabase.close();
        }
        public int delete(long id){
            SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
            int count=sqLiteDatabase.delete("goods","_id=?",new String[]{id+""});
            sqLiteDatabase.close();
            return count;
        }
        public int update(Goods goods){
            SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
            ContentValues values=new ContentValues();
            values.put("name",goods.getName());
            values.put("amount",goods.getAmount());
            int count=sqLiteDatabase.update("goods",values,"_id=?",new String[]{goods.getId()+""});

    
    6、编写交互界面
    

    package com.example.bz0209.myapplication;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.Toast;
    
    import com.example.bz0209.myapplication.dao.GoodsDao;
    import com.example.bz0209.myapplication.entity.Goods;
    import com.example.bz0209.myapplication.entity.GoodsAdapter;
    
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
        private EditText etName;
        private EditText etAmount;
        private GoodsDao goodsDao;
        private ListView lvGoods;
        private GoodsAdapter goodsAdapter;
        private List<Goods> goodsList;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            etName=(EditText)findViewById(R.id.etName);
            etAmount=(EditText)findViewById(R.id.etAmount);
            lvGoods=(ListView)findViewById(R.id.lvGoods);
            goodsDao=new GoodsDao(this);
            goodsList=goodsDao.queryAll();
            goodsAdapter=new GoodsAdapter(this,R.layout.item,goodsList,goodsDao);
            lvGoods.setAdapter(goodsAdapter);
        }
        public void addGoods(View view){
            String name=etName.getText().toString();
            String amount=etAmount.getText().toString();
            if(TextUtils.isEmpty(name)||TextUtils.isEmpty(amount))
                return;
            Goods goods=new Goods(name,Integer.parseInt(amount));
            goodsDao.add(goods);
            goodsList.add(goods);
            goodsAdapter.notifyDataSetChanged();
            etName.setText("");
            etAmount.setText("");
            Toast.makeText(this,"添加成功",Toast.LENGTH_LONG).show();
        }
    }
    
    
            sqLiteDatabase.close();
            return count;
        }
        public List<Goods> queryAll(){
            List<Goods> goodsList=new ArrayList<>();
            SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase();
            Cursor cursor=sqLiteDatabase.query("goods",null,null,null,null,null,"amount desc");
            while(cursor.moveToNext()){
                long id=cursor.getLong(cursor.getColumnIndex("_id"));
                String name=cursor.getString(cursor.getColumnIndex("name"));
                int amount=cursor.getInt(cursor.getColumnIndex("amount"));
                Goods goods=new Goods(id,name,amount);
                goodsList.add(goods);
            }
            cursor.close();
            sqLiteDatabase.close();
            return goodsList;
        }
    }
    
    
    7、适配器

    package com.example.bz0209.myapplication.entity;
    
    import android.content.Context;
    import android.content.DialogInterface;
    import android.preference.DialogPreference;
    import android.support.annotation.NonNull;
    import android.support.v7.app.AlertDialog;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    import com.example.bz0209.myapplication.R;
    import com.example.bz0209.myapplication.dao.GoodsDao;
    
    import java.util.List;
    public class GoodsAdapter extends ArrayAdapter<Goods> {
        private int resounceId;
        private GoodsDao goodsDao;
        private List<Goods> goodsList;
    
        public GoodsAdapter(Context context, int resource, List<Goods> objects,GoodsDao goodsDao) {
            super(context, resource, objects);
            resounceId = resource;
            goodsList=objects;
            this.goodsDao=goodsDao;
        }
    
        @NonNull
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final Goods goods = getItem(position);
            ViewHolder viewHolder;
            View view =null;
            if(convertView==null){
                view= LayoutInflater.from(getContext()).inflate(resounceId,null);
                viewHolder=new ViewHolder();
                viewHolder.tvId= (TextView)view.findViewById(R.id.tvId);
                viewHolder.tvName=(TextView) view.findViewById(R.id.tvName);
                viewHolder. tvAmount = (TextView) view.findViewById(R.id.tvAmount);
                viewHolder.ivUp = (ImageView) view.findViewById(R.id.ivUp);
                viewHolder.ivDown = (ImageView) view.findViewById(R.id.ivDown);
                viewHolder.ivDelete = (ImageView) view.findViewById(R.id.ivDelete);
                view.setTag(viewHolder);
            }else{
                view=convertView;
                viewHolder=(ViewHolder)view.getTag();
            }
            viewHolder.tvId.setText(goods.getId()+"");
            viewHolder.tvName.setText(goods.getName()+"");
            viewHolder.tvAmount.setText(goods.getAmount()+"");
            viewHolder.ivDelete.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v){
                    AlertDialog.Builder builder=new AlertDialog.Builder(getContext());
                    builder.setTitle("你确定要删除吗?");
                    builder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            goodsDao.delete(goods.getId());
                            goodsList.remove(goods);
                            notifyDataSetChanged();
                        }
                    });
                    builder.setNegativeButton("cancel",null);
                    builder.show();
                }
            });
            viewHolder.ivUp.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    goods.setAmount(goods.getAmount()-1);
                    goodsDao.update(goods);
                    notifyDataSetChanged();
                }
            });
            viewHolder.ivDown.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    goods.setAmount(goods.getAmount()+1);
                    goodsDao.update(goods);
                    notifyDataSetChanged();
                }
            });
            return view;
        }
        class ViewHolder{
            TextView tvId;
            TextView tvName;
            TextView tvAmount;
            ImageView ivUp;
            ImageView ivDown;
            ImageView ivDelete;
        }
    }
    
    四、最终结果







    展开全文
  • Android案例:商品展示

    千次阅读 2017-04-25 14:34:15
    开发一个购物车,将购物车中的商品列表的形式进行显示,并且还要对购物车中的商品进行增删改查操作,运用ListView和SQLite数据库。 2、案例实现: (1)、只给出主要代码,界面设计不再给出。 (2)、创建数据库...

    1、案例:


    开发一个购物车,将购物车中的商品以列表的形式进行显示,并且还要对购物车中的商品进行增删改查操作,运用ListView和SQLite数据库。


    2、案例实现:

    (1)、只给出主要代码,界面设计不再给出。

    (2)、创建数据库:

    新建MyHelper类继承自SQLiteOpenHelper,SQLiteOpenHelper是一个抽象类,他有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类中重写这两个方法,在这两个方法中去实现创建、升级数据库的逻辑。

    public class MyHelper extends SQLiteOpenHelper {
        public MyHelper(Context context) {


            super(context,"itcast.db",null,1);
        }


        @Override
        public void onCreate(SQLiteDatabase db) {
            System.out.println("onCreate");
            db.execSQL("CREATE TABLE account(_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name VARCHAR(20),//商品名称列
    balance INTEGER)");//金额列
            
        }


        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            System.out.println("onUpgrade");
        }

    }

    SQLiteOpenHelper中还有两个非常重要的实例方法:getReadableDatabase()和getWritableDatabase()。这两个方法都可

    以创建或打开一个现有的数据库(如果数据库已经存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读

    写操作的对象。不同的是,当数据库不可写入的时候(如磁盘空间已满),getReadableDatabase()方法返回的对象将以只读的

    方式打开数据库,而getWritableDatabase()方法则将出现异常。

    同时,SQLiteOpenHelper中有两个构造方法可供重写,一般使用参数较少的构造方法即可。这个构造方法接收四个参数,第

    一个是Context,必须有他才能对数据库进行操作;第二个是数据库名,创建数据库时使用的就是这里指定的名称;第三是允许我们

    在查询数据时返回一个自定义的Cursor,一般传入null;第四个参数表示当前数据库的版本号,可用于对数据库进行更新操作。构建

    SQLiteOpenHelper的实例后,再调用他的getReadableDatabase()或getWritableDatabase()就能够创建数据库了。


    (3)、创建Account类

    在操作数据库时将数据存放至一个JavaBean对象中操作起来会比较方便。
    public class Account {
        private Long id;
        private String name;
        private int balance;


        public Account(Long id, int balance, String name) {
            this.id = id;
            this.balance = balance;
            this.name = name;
        }


        public Long getId() {


            return id;
        }


        public void setId(Long id) {
            this.id = id;
        }


        public Integer getBalance() {
            return balance;
        }


        public void setBalance(Integer balance) {
            this.balance = balance;
        }


        public String getName() {
            return name;
        }


        public void setName(String name) {
            this.name = name;
        }


        public Account(int i, String name){
            super();
        }


        public String toString(){
            return "{序号:"+id+",商品名称:"+name+",余额:"+balance+"}";
        }
    }

    (4)、创建数据操作逻辑类

    前面创建好数据库和JavaBean后,创建一个AccountDao类用于操作数据。

    public class AccountDao {
        private MyHelper helper;


        public AccountDao(Context context){
            helper = new MyHelper(context);
        }


        public void insert(Account account){
            SQLiteDatabase db = helper.getWritableDatabase();
            ContentValues values = new ContentValues();
            values.put("name",account.getName());
            values.put("balance",account.getBalance());
            long id = db.insert("account",null,values);
            account.setId(id);
            db.close();
        }
        //根据Id删除数据
        public int delete(long id){
            SQLiteDatabase db = helper.getWritableDatabase();
            int count = db.delete("account","_id=?",new String[] {id+""});
            db.close();
            return  count;
        }
        //更新数据
        public int update(Account account){
            SQLiteDatabase db = helper.getWritableDatabase();
            ContentValues values = new ContentValues();
            values.put("name",account.getName());
            values.put("balance",account.getBalance());
            int count = db.update("account",values,"_id=?",new String[] {account.getId()+""});
            db.close();
            return count;
        }
        //查询所有数据倒序排列
        public List<Account> queryAll() {
            SQLiteDatabase db = helper.getReadableDatabase();
            Cursor c = db.query("account",null,null,null,null,null,"balance DESC");
            List<Account> list = new ArrayList<Account>();
            while (c.moveToNext()){
                long id = c.getLong(c.getColumnIndex("_id"));
                String name = c.getString(1);
                int balance = c.getInt(2);
                list.add(new Account(id,balance,name));
            }
            c.close();
            db.close();
            return list;
        }
    }

    在上面代码的insert()方法中调用了db.insert()方法,这个方法第二个参数如果传入的是null,是无法插入一条空数据的。如果想插一条空入数据,第二个参数必须写一个列名(任意列),传入的这个列名是用来拼接SQL语句的。

    (5)、编写界面交互代码

    public class MainActivity extends Activity {


        private List<Account> list;
        private AccountDao dao;
        private EditText nameET;
        private EditText priceET;
        private MyAdapter adapter;
        private ListView accountLV;
        @Override
        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);
        }


        private void initView() {
            accountLV = (ListView) findViewById(R.id.shopList);
            nameET = (EditText) findViewById(R.id.shopName);
            priceET = (EditText) findViewById(R.id.shopPrice);
            accountLV.setOnItemClickListener(new MyOnItemClickListener());
        }
        public void add(View v){
            String name = nameET.getText().toString().trim();
            String balance = priceET.getText().toString().trim();
            Account a = new Account(balance.equals("")?0
                    :Integer.parseInt(balance),name);
            dao.insert(a);
            list.add(a);
            adapter.notifyDataSetChanged();
            accountLV.setSelection(accountLV.getCount()-1);
            nameET.setText("");
            priceET.setText("");
        }


        private class MyAdapter extends BaseAdapter {


            private List<Account> list;
            @Override
            public int getCount() {
                return list.size();
            }


            @Override
            public Object getItem(int position) {
                return list.get(position);
            }


            @Override
            public long getItemId(int position) {
                return position;
            }


            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View item = convertView != null?convertView:View.inflate(
                        getApplicationContext(),R.layout.item,null);
                TextView idTV = (TextView) item.findViewById(R.id.idTV);
                TextView nameTV = (TextView) findViewById(R.id.nameTV);
                TextView priceTV = (TextView) findViewById(R.id.priceTV);
                final Account a = list.get(position);
                idTV.setText(a.getId()+"");
                nameTV.setText(a.getName());
                priceTV.setText(a.getBalance()+"");
                ImageView upIV = (ImageView) item.findViewById(R.id.upIV);
                ImageView downIV = (ImageView) item.findViewById(R.id.downTV);
                ImageView deleteIV = (ImageView) item.findViewById(R.id.deleteTV);


                //向上箭头的点击事件
                upIV.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        a.setBalance(a.getBalance()+1);
                        notifyDataSetChanged();
                        dao.update(a);
                    }
                });
                //向下箭头的点击事件
                downIV.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        a.setBalance(a.getBalance()-1);
                        notifyDataSetChanged();
                        dao.update(a);
                    }
                });
                //删除图片的点击事件
                deleteIV.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        android.content.DialogInterface.OnClickListener listener =
                                new android.content.DialogInterface.OnClickListener(){


                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        list.remove(a);
                                        dao.delete(a.getId());
                                        notifyDataSetChanged();
                                    }
                                };
                        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                        builder.setTitle("确定要删除吗?");
                        builder.setPositiveButton("确定",listener);
                        builder.setPositiveButton("取消",listener);
                        builder.show();
                    }
                });
                return item;
            }
        }
        private class  MyOnItemClickListener implements AdapterView.OnItemClickListener{


            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Account a = (Account) parent.getItemAtPosition(position);
                Toast.makeText(getApplicationContext(),a.toString(),
                        Toast.LENGTH_SHORT).show();


            }
        }
    }

    上述代码中ListView的setOnItemClickListener()方法用于监听Item的点击事件,在使用该方法时需要传入一个OnItemClickListener的实现类对象,并且需要实现onItemClick方法。当点击ListView的Item时就会触发Item的点击事件然后会回调onItemClick()方法.




    展开全文
  • Android 案例:商品展示

    千次阅读 2017-05-02 20:43:47
    开发一个购物车,需要将购物车中的商品列表的形式展示,并且还需要对购物车中的 商品进行增删改查操作。要实现这些功能就需要使用 ListView 和 SQLite 数据库。 运行效果图 设计用户交互界面,布局文件为: ...

    开发一个购物车,需要将购物车中的商品以列表的形式展示,并且还需要对购物车中的
    商品进行增删改查操作。要实现这些功能就需要使用 ListView 和 SQLite 数据库。
    运行效果图
    这里写图片描述

    设计用户交互界面,布局文件为:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="8dp"
        android:orientation="vertical"
    
        tools:context="cn.edu.bzu.myapplication.MainActivity">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
    
            <EditText
                android:id="@+id/tvName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:hint="商品名称"
                android:inputType="text" />
    
            <EditText
                android:id="@+id/tvAmount"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:hint="商品金额"
                android:inputType="number" />
    
            <ImageView
                android:id="@+id/ivAdd"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="addGoods"
                android:src="@android:drawable/ic_input_add" />
        </LinearLayout>
    
        <ListView
            android:id="@+id/lvGoods"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"></ListView>
    </LinearLayout>
    

    很尴尬的事,程序在机房写的,每次回来再自己电脑上运行,运行图都是如此形式,很无奈,后续去机房的时候在为大家把运行图添加上。
    这里写图片描述

    本案例用到了ListView布局,因此需要编写一个ListViewItem的布局,在res/layout目录下创建一个item.xml文件,创建三个TextView和三个ImageView.三个TextView分别用于显示数据库中的商品id,商品名称,商品金额,三个ImageView用于增加金额,减少金额,删除数据。

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/tvId"
            android:text="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:layout_weight="1"
             />
        <TextView
            android:id="@+id/tvName"
            android:text="商品名称"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:layout_weight="2"
            />
        <TextView
            android:id="@+id/tvNumber"
            android:text="商品金额"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:layout_weight="2"
            />
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <ImageView
                android:id="@+id/ivUp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src ="@android:drawable/arrow_up_float"/>
            <ImageView
                android:id="@+id/ivDown"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src ="@android:drawable/arrow_down_float"/>
        </LinearLayout>
        <ImageView
            android:id="@+id/ivDelete"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:src ="@android:drawable/ic_menu_delete"/>
    </LinearLayout

    创建数据库:创建一个名为db的包,并在该包下定义一个类DBHelper继承自SQLiteOpenHelper.

    package cn.edu.bzu.myapplication.db;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    /**
     * Created by Administrator on 2017/4/27.
     */
    
    public class DBHelper extends SQLiteOpenHelper{
        public static final String CREATE_GOODS="create table goods(_id integer primary key autoincrement,name varchar(20),amount integer)";
        public DBHelper(Context context, int version) {
            super(context, "goods.db",null, version);
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) { //建表的SQL语句
            db.execSQL(CREATE_GOODS);
    
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
        }
    }
    

    创建goods类,在操作数据库时将数据存放至一个JavaBean对象中操作起来会比较方便。

    编写数据逻辑操作类,创建dao包,创建GoodsDao类用于操作数据,该类创建了对数据进行增删改查操作的方法。

    package cn.edu.bzu.myapplication.dao;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import cn.edu.bzu.myapplication.db.DBHelper;
    import cn.edu.bzu.myapplication.entity.Goods;
    
    /**
     * Created by Administrator on 2017/4/27.
     */
    
    public class GoodsDao {
        private DBHelper dbHelper;
        private int count;
    
        public GoodsDao(Context context){
            dbHelper=new DBHelper(context,1);
    
        }
        public void add(Goods goods){
            SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
            ContentValues values=new ContentValues();
            values.put("name",goods.getName());
            values.put("amount",goods.getAmount());
            //向goods表中插入数据values
            sqLiteDatabase.insert("goods",null,values);
            sqLiteDatabase.close();//关闭数据库
    
        }
        public int delete(long id){
            SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
            //按条件删除指定表中的数据,返回受影响的行数
            sqLiteDatabase.delete("goods","_id=?",new String[]{id+""});
            sqLiteDatabase.close();
            return count;
        }
        //更新数据
        public int update(Goods goods){
            SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
            ContentValues values=new ContentValues();
            values.put("name",goods.getName());
            values.put("amount",goods.getAmount());
            int count=sqLiteDatabase.update("goods",values,"_id=?",new String[]{goods.getId()+""});
            //更新并得到行数
            sqLiteDatabase.close();
            return count;
    
        }
        //查询所有数据倒序排序
        public List<Goods> queryAll(){
            List<Goods>goodsList=new ArrayList<>();
            SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase();
            Cursor cursor=sqLiteDatabase.query("goods",null,null,null,null,null,"amount desc ");
            while (cursor.moveToNext()){
                //可以根据列名获取索引
                long id=cursor.getLong(cursor.getColumnIndex("id"));
                String name=cursor.getString(cursor.getColumnIndex("name"));
                int amount=cursor.getInt(cursor.getColumnIndex("amount"));
                Goods goods=new Goods(name,amount);
                goodsList.add(goods);
    
    
            }
            cursor.close();
            sqLiteDatabase.close();
            return goodsList;
        }
    }

    创建一个新的包为entity,用于存放JavaBean类,定义一个goods类

    import android.content.Intent;  
    
    
    
    public class Goods {  
        private Long id;  
        private String name;  
        private Integer amount;  
    
        public Goods(Long id, String name, Integer amount) {  
            this.id = id;  
            this.name = name;  
            this.amount = amount;  
        }  
    
        public Goods(String name, Integer amount) {  
            this.name = name;  
            this.amount = amount;  
        }  
    
        public Long getId() {  
            return id;  
        }  
    
        public void setId(Long id) {  
            this.id = id;  
        }  
    
        public String getName() {  
            return name;  
        }  
    
        public void setName(String name) {  
            this.name = name;  
        }  
    
        public Integer getAmount() {  
            return amount;  
        }  
    
        public void setAmount(Integer amount) {  
            this.amount = amount;  
        }  
    
        @Override  
        public String toString() {  
            return "Goods{" +  
                    "id=" + id +  
                    ", name='" + name + '\'' +  
                    ", amount=" + amount +  
                    '}';  
        }  
    }  

    编写界面交互代码
    数据库的操作完成以后需要界面与数据库进行交互,用于实现将数据库中的数据以ListView的形式展示在界面上

    package cn.edu.bzu.myapplication;
    
    import android.content.SharedPreferences;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.ListView;
    
    import java.util.List;
    
    import cn.edu.bzu.myapplication.dao.GoodsDao;
    import cn.edu.bzu.myapplication.entity.Goods;
    
    public class MainActivity extends AppCompatActivity {
        private EditText etName;
        private EditText etAmount;
        private ListView lvGoods;
        private GoodsAdapter goodsAdapter;
        private List<Goods>goodsList;
        private GoodsDao goodsDao;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            etName=(EditText) findViewById(R.id.tvName);
            etAmount=(EditText)findViewById(R.id.tvAmount);
            lvGoods=(ListView)findViewById(R.id.lvGoods);
            goodsDao=new GoodsDao(this);
            goodsList=goodsDao.queryAll();
            goodsAdapter=new GoodsAdapter(this,R.layout.item,goodsList);
            lvGoods.setAdapter(goodsAdapter);
    
        }
        public void addGoods(View view){
            String name=etName.getText().toString();
            String amount=etAmount.getText().toString();
            Goods goods=new Goods(name,amount.equals("")?0:Integer.parseInt(amount));
            goodsDao.add(goods);
    
        }
    }
    

    运行时出现了一下问题:
    E/SQLiteLog: (1) near “autoincremernt”: syntax error
    D/AndroidRuntime: Shutting down VM
    当然我只是截取了一句话,我们看错误的时候一般找到最关键的地方,有时候只要改一个地方,其他的错误就都正确了,刚开始我也是 被一串的错误吓呆了,应为 出现了一串的错误很多代码句都有错误,结果最后检查发现只是 “autoincremernt”单词拼写错误,应该为 “autoincrement”

    这里写图片描述

    展开全文
  • 例如,开发一个购物车,需要将购物车中的商品列表的形式展示,并且还需要对购物车中的商品进行增删改查操作。要实现这些功能就需要使用ListView和SQLite数据库。接下来通过一个 “商品展示案例来实现在界面上...

    在实际开发中,往往避免不了在界面上操作数据库。例如,开发一个购物车,需要将购物车中的商品以列表的形式展示,并且还需要对购物车中的商品进行增删改查操作。要实现这些功能就需要使用ListView和SQLite数据库。接下来通过一个 “商品展示“案例来实现在界面上操作数据库。
    listview与adapterde用法参考地址:http://www.cnblogs.com/zhengbeibei/archive/2013/05/14/3078805.html
    SQLite数据库的使用参考地址:http://blog.csdn.net/xushuaic/article/details/8170614

    1.创建程序
    首先创建一个名为“商品展示”的应用程序。添加3个TextView,分别用于显示数据库中的某条数据的id,商品名称,金额。三个ImageView用于增加金额,减少金额,删除数据。设计用户交互界面如图:
    这里写图片描述
    该图对应的布局文件(activity_main.xml)如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#f5f5dc">
        <LinearLayout
            android:id="@+id/LL"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
    
            <EditText
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:hint="商品名称"
                android:id="@+id/name"/>
            <EditText
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:hint="金额"
                android:id="@+id/price"/>
            <ImageView
                android:id="@+id/addAccount"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@android:drawable/ic_input_add"/>
        </LinearLayout>
        <LinearLayout
            android:id="@+id/LL2"
            android:layout_below="@id/LL"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="3dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="编号"
            android:textSize="20dp" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="商品名称"
            android:textSize="20dp"
            android:layout_marginLeft="15dp"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="价格"
            android:textSize="20dp"
            android:layout_marginLeft="50dp"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="操作"
            android:textSize="20dp"
            android:layout_marginLeft="80dp"/>
        </LinearLayout>
    
        <ListView
            android:id="@+id/display"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fadeScrollbars="false"
            android:divider="#FFFFFF"
            android:dividerHeight="2dp"
            android:layout_below="@+id/LL2" />
    
    </RelativeLayout>
    

    2.创建ListView Item布局
    在res/layout目录下创建一个item.xml文件,编写成如图所示的界面:
    这里写图片描述
    代码如下:

     <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:layout_margin="10dp">
        <TextView
            android:id="@+id/idTV"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="1"
            android:textColor="#000000"
            android:textSize="20sp"
            />
        <TextView
            android:id="@+id/nameTV"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="Towel"
            android:textColor="#000000"
            android:textSize="20sp"
            />
        <TextView
            android:id="@+id/priceTV"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="100"
            android:textColor="#000000"
            android:textSize="20sp"
            />
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginTop="5dp">
            <ImageView
                android:id="@+id/up"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@android:drawable/arrow_up_float"/>
            <ImageView
                android:id="@+id/down"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@android:drawable/arrow_down_float"/>
    
        </LinearLayout>
        <ImageView
            android:id="@+id/delete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/ic_menu_delete"/>
    </LinearLayout>
    

    3.创建数据库
    创建数据库属于数据操作,因此创建一个名为model的包,
    并在该包中定义一个类继承自SQLiteOpenHelper,代码如下:

    package bzu.edu.cn.filedemo.model;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
    
    /**
     * Created by yn on 2017/4/17.
     */
    
    public class AccountDB extends SQLiteOpenHelper{
        public  Context context;
        public static final String DB_NAME="Account.db";
        public static final String ACCOUNT="create table account(id integer primary key autoincrement,name text,balance integer)";
        public AccountDB(Context context) {
            super(context, DB_NAME, null, 1);
            this.context=context;
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
                Log.d("AccountDB","数据库创建成功");
                db.execSQL(ACCOUNT);
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
        }
    }
    

    4.创建Account类
    在操作数据库时将数据存放至一个JavaBean对象中操作起来会比较方便。
    因此在model包下定义一个类Account,代码如下:

    package bzu.edu.cn.filedemo.model;
    
    /**
     * Created by yn on 2017/4/17.
     */
    
    public class Account {
        private long id;
        private String name;
        private Integer balance;
    
        public Account() {}
    
        public Account(String name, Integer balance) {
            this.name = name;
            this.balance = balance;
        }
    
        public Account(long id, String name, Integer balance) {
            this.id = id;
            this.name = name;
            this.balance = balance;
        }
    
        public long getId() {
            return id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getBalance() {
            return balance;
        }
    
        public void setBalance(Integer balance) {
            this.balance = balance;
        }
    
        @Override
        public String toString() {
            return
                    "[编号:" + id +
                    ", 商品名称:" + name +
                    ", 价格:" + balance +
                    "]";
        }
    }
    

    5.创建数据操作逻辑类
    在model包下创建一个AccountDao类用于操作数据,来实现数据库的增、删、改、查。代码如下:

    package bzu.edu.cn.filedemo.model;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by yn on 2017/4/17.
     */
    
    public class AccountDao {
        private AccountDB accountDB;
    
        public AccountDao(Context context){
            accountDB=new AccountDB(context);
        }
       //插入数据
        public void insert(Account account){
            //获取数据库对象
            SQLiteDatabase sqLiteDatabase=accountDB.getWritableDatabase();
            ContentValues values=new ContentValues();   //用来装载要插入的数据的Map
            values.put("name",account.getName());
            values.put("balance",account.getBalance());
            long id=sqLiteDatabase.insert("account",null,values);
            account.setId(id);
        }
        //查询所有数据
        public List<Account> querryAll(){
            SQLiteDatabase sqLiteDatabase=accountDB.getReadableDatabase();
            Cursor cursor=sqLiteDatabase.query("account",null,null,null,null,null,null);
            List<Account> list=new ArrayList<Account>();
            if(cursor.moveToFirst()) {
                    do{
                        long id=cursor.getLong(cursor.getColumnIndex("id"));
                        String name=cursor.getString(1);
                        int balance=cursor.getInt(2);
                        list.add(new Account(id,name,balance));
                    }while(cursor.moveToNext());
            }
            return list;
        }
    
        //修改数据
        public int update(Account account){
            SQLiteDatabase sqLiteDatabase=accountDB.getWritableDatabase();
            ContentValues values=new ContentValues();
            values.put("name",account.getName());
            values.put("balance",account.getBalance());
            int count=sqLiteDatabase.update("account",values,"id=?",new String[]{account.getId()+""});
            return count;
        }
        //根据id删除数据
        public int delete(long id){
            SQLiteDatabase sqLiteDatabase=accountDB.getWritableDatabase();
            int count=sqLiteDatabase.delete("account","id=?",new String[]{id+""});
            return count;
        }
    }
    

    6.编写界面交互代码(MainActivity)
    用于实现将数据库中的数据以ListView的形式展示在界面上,需要对ListView进行数据适配,
    如果不对LIstView进行数据适配,那么就无法在界面上看到布局文件创建的ListView。
    在程序中使用了对话框,当点击删除图标时弹出一个对话框。还对ListView中每一行设置了点击事件。
    具体代码如下所示:

    package bzu.edu.cn.filedemo;
    
    import android.app.AlertDialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.support.annotation.NonNull;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import bzu.edu.cn.filedemo.model.Account;
    
    import bzu.edu.cn.filedemo.model.AccountDao;
    
    public class Main4Activity extends AppCompatActivity {
        private TextView name, account;
        private ImageView iv;
        private ListView lv;
        AccountArray accountArray;
        private List<Account> accountList;
        //private AccountDB accountDB;
        private AccountDao dao;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main4);
    
            //找到我们需要的控件
            name = (TextView) findViewById(R.id.name);
            account = (TextView) findViewById(R.id.price);
            iv = (ImageView) findViewById(R.id.addAccount);
            lv = (ListView) findViewById(R.id.display);
    
            //添加监听事件,监听条目点击事件
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    //获取点击位置上的数据
                    Account account=(Account)parent.getItemAtPosition(position);
                    Toast.makeText(Main4Activity.this,account.toString(),Toast.LENGTH_LONG).show();
                }
            });
            //实例化AccountDao
            dao = new AccountDao(this);
            //调用方法查询出所有数据
            selectAccount();
            //ImageView 的点击事件
            iv.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    addAccount();
                    selectAccount();
                }
            });
        }
    
        //增加一条数据
        private void addAccount() {
            String name1 = name.getText().toString();
            String price = account.getText().toString();
            accountList = new ArrayList<>();
            //检验商品名称和价格是否为空
            if(name1.equals("")&&price.equals("")){
                Toast.makeText(this,"请输入商品名称和价格",Toast.LENGTH_LONG).show();
            }
            else {
                //如果balance不是空字符串,则进行类型转化
                Account a = new Account(name1, price.equals("") ? 0 : Integer.parseInt(price));
                dao.insert(a);     //插入数据库
                accountList.add(a);    //插入集合
            }
            name.setText("");
            account.setText("");
        }
    
        //查询数据并显示在ListView上
        private void selectAccount() {
            accountList = dao.querryAll();   //从数据库查询出所有数据
            //给ListView添加适配器
            accountArray = new AccountArray(Main4Activity.this, R.layout.shop_item, accountList);
            lv.setAdapter(accountArray);
        }
    
        //自定义一个适配器
        public class AccountArray extends ArrayAdapter<Account> {
            //private TextView id,name,price;
            private int resourseId;
            private Context context;
           // private AccountDao dao;
            //List<Account> list;
    
            public AccountArray(Context context, int resource, List<Account> list) {
                super(context, resource, list);
                resourseId=resource;
                //this.list=list;
                this.context=context;
            }
            @NonNull
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                //根据当前位置获得Account对象
                final Account account=getItem(position);
                View view;
                ViewHolder viewHolder;
                //ListView的优化
                if(convertView==null){
                    view= LayoutInflater.from(getContext()).inflate(resourseId,parent,false);
                    viewHolder=new ViewHolder();
                    viewHolder.id=(TextView)view.findViewById(R.id.idTV);
                    viewHolder.name=(TextView)view.findViewById(R.id.nameTV);
                    viewHolder.price=(TextView)view.findViewById(R.id.priceTV);
                    view.setTag(viewHolder);    //把viewHolder存储到view中
                }else{
                    view=convertView;
                    viewHolder=(ViewHolder)view.getTag();   //重新获取viewHolder
                }
                viewHolder.id.setText(account.getId()+"");
                viewHolder.name.setText(account.getName());
                viewHolder.price.setText(account.getBalance()+"");
                 //获取控件
                ImageView up=(ImageView)view.findViewById(R.id.up);
                ImageView down=(ImageView)view.findViewById(R.id.down);
                ImageView delete=(ImageView)view.findViewById(R.id.delete);
                //向上箭头的点击事件
                up.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        account.setBalance(account.getBalance() + 1);   //修改值
                        dao.update(account);     //更新数据库
                        notifyDataSetChanged();    //刷新界面
                    }
                });
    
                //下箭头的点击事件
                down.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        account.setBalance(account.getBalance()-1);
                        dao.update(account);
                        notifyDataSetChanged();
                    }
                });
    
                //删除的点击事件
                delete.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //删除之前弹出一个对话框
                        android.content.DialogInterface.OnClickListener listener = new android.content.DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                accountList.remove(account);
                                dao.delete(account.getId());
                                notifyDataSetChanged();
    
                            }
                        };
                        //创建对话框
                        AlertDialog.Builder builder=new AlertDialog.Builder(context);
                        builder.setTitle("你确定要删除吗?");  //设置标题
                        builder.setPositiveButton("确定",listener);  //设置确定按钮的文本以及监听器
                        builder.setNegativeButton("取消",null);   //设置取消按钮
                        builder.show();    //显示对话框
                    }
                });
                return view;
            }
            class ViewHolder{
                TextView id;
                TextView name;
                TextView price;
    
            }
        }
    }

    上述代码实现了界面管理数据库,(1)使用了ArrayAdapter适配器对ListView进行数据适配:
    步骤:
    自定义一个类继承ArrayAdapter;
    对该类定义一个构造方法;
    重写ArrayAdapter中的getView()方法;
    调用getItem()方法,获取条目中的每一行

    (2)对ListView进行优化:
    复用ConvertView
    重用ViewHolder
    详细参考地址:http://www.tuicool.com/articles/uyiAZzA
    http://blog.csdn.net/dfqin/article/details/7458853
    代码如下:
    这里写图片描述

    (3)对ListView设置监听事件,点击每一行时获取此行的数据

    (4)程序中使用了对话框AlertDialog。对话框的创建代码如下:

    这里写图片描述

    7.程序运行结果
    1.程序首次运行结果:
    这里写图片描述

    2。添加商品

    这里写图片描述

    增加或减少商品金额
    这里写图片描述

    删除商品
    这里写图片描述

    点击每一行时
    这里写图片描述

    展开全文
  • 例如,开发一个购物车,需要将购物车中的商品列表的形式展示,并且还需要对购物车中的商品进行增删改查操作。要实现这些功能就需要使用ListView和SQLite数据库。接下来通过一个 “商品展示案例来实现在界面上...
  • Android中商品展示案例

    千次阅读 2017-05-03 22:21:06
    (1)需要将购物车中的商品列表的形式展示 (2)并且还需要对购物车中的 商品进行增删改查操作。 (3)要实现这些功能就需要使用 ListView 和 SQLite 数据库。 1.创建一个名为ProdectDisplay的程序 2.(1...
  • android中商品展示案例

    2017-06-14 22:55:45
    (1)需要将购物车中的商品列表的形式展示 (2)并且还需要对购物车中的 商品进行增删改查操作。 (3)要实现这些功能就需要使用 ListView 和 SQLite 数据库。 1.创建一个名为ProdectDisplay的...
  •  开发一个购物车,需要将购物车中的商品列表的形式展示,并且还需要对购物车中的商品进行增删改查操作。要实现这些功能就需要使用ListView和SQLite数据库。 二、运行效果图 三、训练目标 (1)、掌握...
  • 开发一个购物车,需要将购物车中的商品列表的形式展示,并且还需要对购物车中的商品进行增删改查操作。要实现这些功能就需要使用 ListView 和 SQLite 数据库运行效果图添加数据删除名称为123的商品修改数据——给...
  • Android中创建一个商品展示案例

    千次阅读 2017-04-22 22:09:21
    开发一个购物车,需要将购物车中的商品列表的形式展示,并且还需要对购物车中的商品进行增、删、改、查操作。要实现这些功能就需要使用ListView和SQLite数据库。接下来通过一个“商品展示案例结合ListView和...
  • 本课程希望通过一种兴趣的形式带领大家快速的进行python语言学习的队列中。老师一贯的教学方式是:以案例为驱动去学习知识点,而不是死学知识点。 本课程主要有的内容: 讲解多个编程语言的适用的领域,...
  • 例如,开发一个购物车,需要将购物车中的商品列表的形式展示,并且还需要对购物车中的商品进行增、删、改、查操作。要实现这些功能就需要使用ListView和SQLite数据库。接下来通过一个“”商品展示“”案例结合...
  • 开发一个购物车,需要将购物车中的商品陈列的形式展示,并且还需要对购物车的商品进行增删改查操作。要实现这些功能就需要使用ListView和SQLite数据库。接下来通过一个“商品展示案例实现在界面上的操作数据库。...
  • 在企业的数据分析系统中,前端展现工具有很多, 独立部署专门系统的方式:Business Objects...有WEB程序展现方式:通过独立的或者嵌入式的java web系统来读取报表统计结果,网页的形式对结果进行展现,如,100...
  • 开发一个购物车,将购物车的商品列表的形式展示,并且对购物车中的商品进行增、删、改、查操作。运行效果图:   一、界面设计 1.主界面 xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:...
  • 1.案例—— 商品展示– 开发一个购物车,需要将购物车中的商品列表的形式展示,并且还需要对购物车中的商品进行增删改查操作。要实现这些功能就需要使用ListView和SQLite数据库。– 接下来通过一个商品展示案例...
  • 开发一个购物车,需要将购物车中的商品列表的形式展示,并且还需要对购物车中的商品进行增删改查操作。要实现这些功能就需要使用 ListView 和 SQLite 数据库。 二、 训练目标 1) 掌握 SQLite 存储方式 2) 掌握如何...
  • 因涉及成本核算案例篇,所需要图表比较多,但是知乎不同于微信可以直接将文档图表复制过来,知乎专栏文章,所有图表必须先截图,然后图片形式展示。但是成本核算案例图表实在是太多,一一截图,一则影响整体观感...
  • 商品展示

    2017-04-30 16:05:32
    实验内容:开发一个购物车,需要将购物车中的商品列表的形式展示,并且还需要对购物车中的 商品进行增删改查操作。要实现这些功能就需要使用 ListView 和 SQLite 数据库。运行效果图:实现该案例的具体步骤如下: ...
  • android商品展示

    2017-04-24 23:17:26
    例如,开发一个购物车,需要将购物车中的商品列表的形式展示,并且还需要对购物车中的商品进行增、删、改、查操作。要实现这些功能就需要使用ListView和SQLite数据库。接下来通过一个“”商品展示“”案例结合...
  • 最近在学习 PyQt5 GUI 编程,大致路线是找了套网课《撩课-Python-GUI编程-PyQt5》,梳理思维导图的形式梳理了下基础知识点以及 QtDesigner 应用流程,跳过各种具体控件的细节,结合课程中具体的综合案例进行具体...
  • 今天,我们来给大家讲解一下power query中的透视列功能的基本使用,同时会给大家案列的形式进行展示相关应用场景。透视列的功能是将一个一维的表格转为二维的表格,具体什么意思呢?我们还是给大家通过一个实例...
  • 列表ListView显示购物车商品

    千次阅读 2017-04-24 09:40:20
    案例:开发一个购物车,需要将购物车中的商品列表的形式显示,并且还要对购物车中的商品进行增,删,改,查操作,利用ListView和SQLite数据库。 1,创建程序 首先创建一个名为“商品展示”的应用程序,设计用户...
  • 有客户要求新闻的形式发布 有客户人要求博客的形式发布 有客户希望微信公众号的形式发布 2 传统方案解决网站展现项目 直接复制粘贴一份,然后根据客户不同要求,进行定制修改 给每个网站租用一个空间 方案...

空空如也

空空如也

1 2 3 4 5 6
收藏数 112
精华内容 44
关键字:

以案例的形式进行展示