SQLite数据库---ListView控件之商品展示案例
来源:互联网 发布:九十年代流行网络歌曲 编辑:程序博客网 时间:2024/05/17 09:17
运用ListView控件在界面上操作数据库。开发一个购物车,需要将购物车中的商品以陈列的形式展示,并且还需要对购物车的商品进行增删改查操作。要实现这些功能就需要使用ListView和SQLite数据库。接下来通过一个“商品展示”案例实现在界面上的操作数据库。具体步骤如下:
1.创建程序
首先创建程序,修改包名,设计用户交互界面。此程序对应的布局文件(activity_main.xml)如下所示:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="8dp" android:orientation="vertical" tools:context=".MainActivity" > <LinearLayout android:id="@+id/addLL" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/nameET" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="商品名称" android:inputType="textPersonName" /> <EditText android:id="@+id/balanceET" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="金额" android:inputType="number" /> <ImageView android:id="@+id/addIV" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="add" android:src="@android:drawable/ic_input_add" /> </LinearLayout> <ListView android:id="@+id/accountLV" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/addLL" > </ListView></LinearLayout>
android:src="@android:drawable/ic_input_add" 显示图片的原图大小效果图展示:
2.创建ListView
Item布局 在res/layout下创建一个item.xml文件,创建三个TextView和三个ImageView,代码如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp"> <TextView android:id="@+id/idTV" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="13" 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:singleLine="true" android:text="PQ" android:textColor="#000000" android:textSize="20sp" /> <TextView android:id="@+id/balanceTV" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:singleLine="true" android:text="12345" android:textColor="#000000" android:textSize="20sp" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <ImageView android:id="@+id/upIV" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:src="@android:drawable/arrow_up_float" /> <ImageView android:id="@+id/downIV" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/arrow_down_float" /> </LinearLayout> <ImageView android:id="@+id/deleteIV" android:layout_width="25dp" android:layout_height="25dp" android:src="@android:drawable/ic_menu_delete" /></LinearLayout>
添加的三个TextView分别用于显示数据库中的某条数据的id,商品名称,金额。添加的三个ImageView用于增加金额,减少金额,删除数据。
效果图展示:
3.创建数据库
创建数据库属于数据操作,因此需要在cn.edu.bzu.productshow包下创建一个名为Dao的包。并在该包下定义一个MyHelper类继承自SQLiteOpenHelper,创建数据库的代码如下:
package cn.edu.bzu.productshow.Dao;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;import cn.edu.bzu.productshow.MainActivity;public class MyHelper extends SQLiteOpenHelper{ //由于父类没有无参构造参数,所以子类必须指定调用弗雷德哪个有参的构造函数 public MyHelper(Context context) { super(context, "product.db", null, 2); } @Override public void onCreate(SQLiteDatabase db) { Log.d("MyHelper","OnCreate"); db.execSQL("create table account(_id integer primary key autoincrement,name varchar(20),balance integer)");//id主键,商品名称列,金额列 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.d("MyHelper","OnUpgrade"); }}
4.创建Account类
在操作数据库时将数据存放至一个JavaBean对象操作起来比较方便。因此需要在cn.edu.bzu.productshow包下创建一个Bean包用于存放JavaBean类,然后在cn.edu.bzu.productshow.Bean包下定义一个类Account。具体代码如下:
package cn.edu.bzu.productshow.Bean;public class Account { private Long id; private String name; private Integer balance; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Integer getBalance() { return balance; } public void setBalance(Integer balance) { if(balance>=0) this.balance = balance; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Account(long id, String name, Integer balance) { super(); this.balance = balance; this.name = name; this.id = id; } public Account(String name, Integer balance) { super(); this.name = name; this.balance = balance; } public Account() { super(); } public String toString() { return "[序号:"+id+",商品名称"+name+",余额:"+balance+"]"; }}
5.创建数据操作逻辑类
在cn.edu.bzu.productshow.Dao包下创建一个AccountDao类用于操作数据。具体代码如下:
package cn.edu.bzu.productshow.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.productshow.Bean.Account;public class AccountDao { private MyHelper helper; public AccountDao(Context context){ //创建Dao时,创建helper helper=new MyHelper(context); } //---------插入 public void insert(Account account){ //读取数据库对象 SQLiteDatabase db=helper.getWritableDatabase(); //用来装载要插入的数据的MapM<列名,列的值> 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();//关闭数据库 } //---------删除,根据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.getWritableDatabase(); 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,name,balance)); } c.close(); db.close(); return list; }}
上述代码是操作数据库的逻辑类AccountDao。该类创建了对数据库的增删改查操作的方法。
6.编写页面交互代码
数据库操作完成之后需要界面与数据库交互,用于实现将数据库中的数据以ListView的形式展示在界面上,具体代码如下所示:
package cn.edu.bzu.productshow;import android.app.Activity;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import cn.edu.bzu.productshow.Bean.Account;import java.util.List;import java.util.Locale;import cn.edu.bzu.productshow.Dao.AccountDao;public class MainActivity extends Activity {//需要适配的数据集合 private List<Account> list; //需要增删改查操作类 private AccountDao dao; //输入姓名的edittext private EditText nameET; //输入金额的edittext private EditText balanceET; //适配器 private MyAdapter adapter; //Listview 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);//给ListView添加适配器(自动把数据生成条目) } //初始化控件 private void initView() { accountLV=(ListView)findViewById(R.id.accountLV); nameET=(EditText) findViewById(R.id.nameET); balanceET=(EditText)findViewById(R.id.balanceET); //添加监听器,监听条目点击事件 accountLV.setOnItemClickListener(new MyOnItemClickListener()); } //activity_main.xml对应的inageview的点击事件触发的方法 public void add(View v) { String name=nameET.getText().toString().trim(); String balance=balanceET.getText().toString().trim(); if("".equals(name)||"".equals(balance)) { Toast.makeText(getApplicationContext(),"商品名称和金额不能为空",Toast.LENGTH_LONG).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(""); } //自定义一个适配器(把数据装到ListView的工具) private class MyAdapter extends BaseAdapter{ public int getCount(){ //获取条目总数 return list.size(); } public Object getItem(int position) //根据位置获取对象 { return list.get(position); } public long getItemId(int position) //根据位置获取id { return position; } //获取一个条目视图 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)n notifyDataSetChanged(); dao.update(a); } }); //向下箭头的事件触发方法 upTV.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; } } //Listview的item点击事件 private class MyOnItemClickListener implements OnItemClickListener{ 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(); } }}
7.运行程序展示商品信息
运行程序时首先添加商品名称以及金额,点击加号就会将Edittext中输入的内容添加至数据库并显示适配到ListView中。多添加几条数据,然后点击某条数据的向上的按钮,金额就会增加。向下按钮同理。点击某条数据的删除图案,会弹出一个对话框,确认后就能删除数据了。单击某条数据室,会弹出toast。
添加 多添加几条数据 向上使金额增加
显示属性 删除提示 删除成功
案例就基本完成了,当然还存在着一些问题和需要改善的地方。
写博文也是一种学问啊 修改了多次之后终于写好了。
- SQLite数据库---ListView控件之商品展示案例
- SQLite数据库---ListView控件之商品展示案例
- SQLite数据库---ListView控件之商品展示案例
- Android——(SQLite数据库)ListView控件之商品展示案例
- ListView和SQLite数据库案例--商品展示
- ListView和SQLite数据库案例--商品展示
- SQLite数据库--案例:商品展示
- ListView控件---商品展示案例
- SQLite数据库——案例:商品展示
- ListView控件的使用--商品展示案例
- android 之SQLite案例--商品展示
- 商品展示案例(SQLite数据库存储和ListView的使用)
- 数据存储运用ListView和SQLite数据库综合案例——商品展示
- SQLite数据库应用之商品展示
- android SQLite案例(商品展示)
- Android学习笔记——SQLite数据库案例【商品展示】
- ListView+ SQLite实现商品展示
- 结合ListView和SQLite数据库实现商品展示案列
- EF
- XMinCMSEntities
- sysmenuDAO
- 如果,有温度的陪伴
- GDB调试器
- SQLite数据库---ListView控件之商品展示案例
- [仙人掌同构 Hash] Codeforces Gym 100307 NEERC 13 C. Cactus Automorphisms
- Linux面试题集锦五
- Could not open Hibernate Session for transaction
- Linux面试题集锦六
- tomcat启动报错
- 嵌入式调试器GDB
- tomcat启动报错、tomcat日志报错
- CCF NOI1011 正方形