Android SQLite(5)商品展示案例

来源:互联网 发布:head first java 下载 编辑:程序博客网 时间:2024/05/21 09:37

运行程序时,有一个“添加”按钮和1两个EditText分别用来输入姓名和金额,单击“添加”按钮能将内容,添加至数据库并显示到ListView中。点击上下增加数量,点击删除的图片会执行删除。

      运行效果如下:





AccountDao类

import edu.bzu.cn.shop.entity.Account;

/**
 * Created by Administrator on 2017/4/17.
 */

public class AccountDao {
    private  DBhelper dBhelper;

    public AccountDao(Context context) {
        dBhelper =new DBhelper(context);
    }
    public void insert(Account account) {
        SQLiteDatabase db = dBhelper.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();
    }
        public int delete(long id) {
            SQLiteDatabase db = dBhelper.getWritableDatabase();
            int count=db.delete("account","_id=?",new String[]{ id+"" });
            db.close();
            return count;
    }
      public int update(Account account){
         SQLiteDatabase db=dBhelper.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=dBhelper.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;
    }
}
DBhelper//创建数据库
package edu.bzu.cn.shop.dao;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by Administrator on 2017/4/17.
 */

public class DBhelper extends SQLiteOpenHelper {
    private  static  final  String DBNAME="shop.db";
    private static  final  String CRE_TABLE="create table account(_id integer primary key autoincrement,name varchar(20),balance integer)";
    public DBhelper(Context context) {
        super(context, DBNAME, null, 2);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
         sqLiteDatabase.execSQL(CRE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}
Account//工具类
package edu.bzu.cn.shop.entity;

/**
 * Created by Administrator on 2017/4/17.
 */

public class Account {
    private Long id;
    private String name;
    private Integer 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;
    }
    public String toString(){
        return "[序号:"+id+",商品名称:"+name+",余额:"+balance+"]";
    }
}
activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="edu.bzu.cn.shop.MainActivity">
   <LinearLayout
       android:id="@+id/linearLayout"
       android:layout_width="match_parent"
       android:layout_height="wrap_content">
    <EditText
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:inputType="textPersonName"
        android:hint="商品名称"
        android:ems="10"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/editText" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:inputType="textPersonName"
        android:text="金额"
        android:ems="10"
        android:layout_alignParentTop="true"
         />
       <ImageView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:src="@android:drawable/ic_input_add"
           android:onClick="add"
           />
    </LinearLayout>

    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/linearLayout"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="43dp" />

</RelativeLayout>
item
<?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:text="13"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv1"
        android:layout_weight="1"
        android:textSize="20sp"
        android:textColor="#000000"/>
    <TextView
        android:text="PQ"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv2"
        android:layout_weight="2"
        android:textSize="20sp"
        android:textColor="#000000"
        />
    <TextView
        android:text="12345"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv3"
        android:layout_weight="2"
        android:textSize="20sp"
        android:textColor="#000000"
        />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
        <ImageView
            android:id="@+id/iv1"
            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/iv2"
            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>
编写界面交互代码
   public class MainActivity extends Activity{
     //需要适配器的数据集合
     private List<Account> list;
     private AccountDao dao;//数据库增删改查操作类
     private EditText nameET;//输入姓名的文本框
     private EditText balanceET;
     private MyAdapter adapter;
     private ListView accountLV;
     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(){//初始化控件
      accouuntLV=(ListView)findViewById(R.id.accountLV);
      nameET=(EditText)findViewById(R.id.nameET);
      balanceET=(EditText)findViewById(R.id.balanceET);//添加监听器,监听条目点击事件
      accountLV.setOnItemClickListener(new MyOnItemClickListener());
    }
   public void add(View v){
      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();
      list.add(a);
      adapter.notifyDataSetChanged();
      accountLV.setSelection(accountLV.getCount()-1);
      nameET.setText("");
      balnceET.setText("");
   }
   private class MyAdapter extends BaseAdapter{//自定义适配器
      public int getCount(){
          return list.size();
      }
      public Object getItem(int position){
         return list.get(position);
      }
     public long getItenId(int position){
       return position;
     }
     public View getView(int position,View convertView,ViewGroup partent){
         View item=convertView!=null?convertView:View.inflate(getApplicationContext(),R.layout.item,null);
         TextView idTV=(TextView)item.findViewById(R.id.idTV);
         TextView nameTV=(TextView)item.findViewById(R.id.nameTV);
         TextView balanceTV=(TextView)item.findViewById(R.id.balanceTV);
         final Account a=list.get(position);
         idTV.setText(a.getId()+"");
         nameTV.setText(a.getName()+"");
         balanceTV.setText(a.getBalance()+"");
         ImageView upIV=()item.findViewById(R.id.upIV);
         ImageView downIV=()item.findViewById(R.id.downIV);
         ImageView deleteIV=()item.findViewById(R.id.deleteIV);
         upIV.setOnClickListener(new OnClickListener()){//向上箭头的点击事件的触发方法
            public void onClick(View v){
                a.setBalance(a.getBalance()+1);
                notifyDataSetChanged();
                dao.update(a);
            }
         });
          downIV.setOnClickListener(new OnClickListener()){//向上下箭头的点击事件的触发方法
            public void onClick(View v){
                a.setBalance(a.getBalance()-1);
                notifyDataSetChanged();
                dao.update(a);
            }
         });
         deleteIV.setOnClickListener(new OnClickListener()){//删除图片的点击事件的触发方法
            public void onClick(View v){
              android.content.DialogInterface.OnClickListener Listener=new android.content.DialogInterface.
                 OnClickListener(){
            public void onClick(DialogInterface dailog,in 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;
}
}
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());
}

}

}

上面运用了Adapter的 notifyDataSetChanged()方法,该方法适用于重新数据,当数据适配器中的内容发生变化时,会调用此方法,重新执行BaseAdapter中的getView()方法。


0 0
原创粉丝点击