结合ListView和SQLite数据库实现商品展示案列

来源:互联网 发布:9wifi九维网络客服 编辑:程序博客网 时间:2024/06/05 01:56

1.创建名为Lab04的程序

  a.该程序对应的布局文件,如下所示:
<?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:id="@+id/addLL"       android:layout_width="match_parent"       android:layout_height="wrap_content"       android:orientation="horizontal">       <EditText           android:id="@+id/et01"           android:hint="商品名称"           android:layout_width="0dp"           android:layout_height="wrap_content"           android:layout_weight="1"/>       <EditText           android:id="@+id/et02"           android:layout_width="0dp"           android:layout_weight="1"           android:layout_height="wrap_content"           android:hint="金额" />       <ImageView           android:id="@+id/ivIcon1"           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/lv01"        android:layout_width="match_parent"        android:layout_height="match_parent">    </ListView></LinearLayout>
2.创建ListView Item布局
 b.创建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">    <TextView        android:textColor="#000000"        android:id="@+id/tvid"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_weight="1"        android:textSize="20sp"        android:text="1"/>    <TextView        android:id="@+id/tvname"        android:textColor="#000000"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:text="名称"        android:textSize="20sp"        android:layout_weight="2"/>    <TextView        android:textColor="#000000"        android:id="@+id/tvprice"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_weight="2"        android:text="100"        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:layout_marginBottom="2dp"        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="wrap_content"        android:layout_height="wrap_content"        android:src="@android:drawable/ic_menu_delete"/></LinearLayout>
3.创建数据库
 c.创建一个名为dao的包,并在该包下定义一个MyHelper类继承自SQLiteOpenHelper,创建数据库代码如下所示:
 import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.provider.Settings;/** * Created by Administrator on 2017/4/17. */public class MyHelper extends SQLiteOpenHelper {    public MyHelper(Context context) {        super(context, "db", null, 2);    }    @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");    }}

4.创建Account类

   d.创建一个包用于存放Javabean类,在包底下定义一个Account类,具体代码如下:
  
public class Account {    private Long id;    private String name;    private int 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 int getBalance() {        return balance;    }    public void setBalance(int balance) {        this.balance = balance;    }    public Account(Long id, String name, int balance) {        super();        this.id = id;        this.name = name;        this.balance = balance;    }    public Account( String name, int balance) {        super();        this.name = name;        this.balance = balance;    }    public Account() {        super();    }    public String toString(){        return "[序号:"+id+",商品名称:"+name+",余额:"+balance+"]";    }}
5.创建数据库操作类
  e.创建AccountDao类用于数据操作,代码如下:
import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.example.bz0209.myapplication.bean.Account;import java.util.ArrayList;import java.util.List;/** * Created by Administrator on 2017/4/17. */public class AccountDao {    private MyHelper myHelper;    public AccountDao(Context context){        myHelper=new MyHelper(context);    }    public void  insert(Account account){        SQLiteDatabase db=myHelper.getWritableDatabase();        ContentValues contentValues=new ContentValues();        contentValues.put("name",account.getName());        contentValues.put("balance",account.getBalance());        long id=db.insert("account",null,contentValues);        account.setId(id);        db.close();    }    public int delete(long id){        SQLiteDatabase db=myHelper.getWritableDatabase();        int count=db.delete("account","_id=?",new String[] {id+""});        db.close();        return count;    }    public int update(Account account){        SQLiteDatabase db=myHelper.getWritableDatabase();        ContentValues contentValues=new ContentValues();        contentValues.put("name",account.getName());        contentValues.put("balance",account.getBalance());        int count=db.update("account",contentValues,"_id=?",new String[] {account.getId()+""});        db.close();        return count;    }    public List<Account> queryAll(){        SQLiteDatabase db=myHelper.getReadableDatabase();        Cursor cursor=db.query("account",null,null,null,null,null,"balance DESC");        List<Account> list=new ArrayList<Account>();        while(cursor.moveToNext()){            long id=cursor.getLong(cursor.getColumnIndex("_id"));            String name=cursor.getString(1);            int balance=cursor.getInt(2);            list.add(new Account(id,name,balance));        }        cursor.close();        db.close();        return list;    }}
6.编写界面交互代码(MainActivity)
  f.代码如下所示:
import android.app.Activity;import android.content.DialogInterface;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;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 com.example.bz0209.myapplication.bean.Account;import com.example.bz0209.myapplication.dao.AccountDao;import java.util.List;public class MainActivity extends Activity { private List<Account> list;    private AccountDao dao;    private EditText nameET;    private EditText balanceET;    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.lv01);        nameET=(EditText)findViewById(R.id.et01);        balanceET=(EditText)findViewById(R.id.et02);        accountLV.setOnItemClickListener(new MyOnItemClickListener());    }    public void add(View view){        String name=nameET.getText().toString().trim();        String balance=balanceET.getText().toString().trim();        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("");    }    private class MyAdapter extends BaseAdapter{        @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.listview_itemd,null);            TextView tvid=(TextView)item.findViewById(R.id.tvid);            TextView tvname=(TextView)item.findViewById(R.id.tvname);            TextView tvbalance =(TextView)item.findViewById(R.id.tvprice);            final Account a=list.get(position);            tvid.setText(a.getId()+"");            tvname.setText(a.getName());            tvbalance.setText(a.getBalance()+"");            ImageView ivup=(ImageView)item.findViewById(R.id.ivup);            ImageView ivdown=(ImageView)item.findViewById(R.id.ivdown);            ImageView ivdelete=(ImageView)item.findViewById(R.id.ivdelete);            ivup.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    a.setBalance(a.getBalance()+1);                    notifyDataSetChanged();                    dao.update(a);                }            });            ivdown.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    a.setBalance(a.getBalance()-1);                    notifyDataSetChanged();                    dao.update(a);                }            });            ivdelete.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    android.content.DialogInterface.OnClickListener listener=new android.content.DialogInterface.OnClickListener(){                        public void onClick(DialogInterface dialogInterface,int which){                            list.remove(a);                            dao.delete(a.getId());                            notifyDataSetChanged();                        }                    };                    AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);                    builder.setTitle("确定要删除吗?");                    builder.setPositiveButton("确定",listener);                    builder.setNegativeButton("取消",null);                    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();        }    }}
7.运行代码,结果如下所示:


0 0