您的位置:首页 > 数据库

ListView+ SQLite实现商品展示

2017-04-24 20:17 218 查看

1.首先是UI界面



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




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



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.运行测试



项目案例下载:链接:http://pan.baidu.com/s/1c2N7jqw 密码:87o3
(无力吐槽CSDN资源上传真是重重困难)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 listview sqlite ui