安卓開發之商品展示--關於Listview的使用以及資料庫的增刪改查
阿新 • • 發佈:2019-01-29
商品展示佈局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" 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="com.example.bz0209.arrayadapter.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/addLL" android:orientation="horizontal"> <EditText android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/nameET" android:layout_weight="1" android:hint="商品名稱" android:inputType="textPersonName"/> <EditText android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/balanceET" android:layout_weight="1" android:hint="金額" android:inputType="number"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/addIV"
建立ListView item.xml佈局android:onClick="add" android:src="@android:drawable/ic_input_add"/> </LinearLayout> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/accountLV" android:layout_below="@id/addLL"></ListView> </LinearLayout>
<?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:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="13" android:textColor="#000000" android:textSize="20sp" android:id="@+id/idTV"/> <TextView android:layout_width="0dp" android:layout_weight="2" android:layout_height="wrap_content" android:text="PQ" android:textColor="#000000" android:singleLine="true" android:textSize="20sp" android:id="@+id/nameTV"/> <TextView android:layout_width="0dp" android:layout_weight="2" android:layout_height="wrap_content" android:text="12345" android:textColor="#000000" android:textSize="20sp" android:id="@+id/balanceTV"/> <LinearLayout android:layout_width="wrap_content" android:orientation="vertical" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:id="@+id/upIV" android:src="@android:drawable/arrow_up_float"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/downIV" android:src="@android:drawable/arrow_down_float"/> </LinearLayout> <ImageView android:layout_width="25dp" android:layout_height="25dp" android:id="@+id/deleteTV" android:src="@android:drawable/ic_menu_delete"/> </LinearLayout>
在包下建名為bean的包
建立Account類
package com.example.bz0209.arrayadapter.bean;
/**
* Created by Administrator on 2017/4/17.
*/
public class Account {
private String name;
private long id;
private Integer balance;
public Account(){
super();
}
public Account( String name,Integer balance) {
super();
this.name = name;
this.balance = balance;
}
public Account( Long id, String name,Integer balance) {
super();
this.id = id;
this.name = name;
this.balance = balance;
}
public String getName() {
return name;
}
public void setName(String name) {
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 toString(){
return "[序號:"+id +",商品名稱:"+name+",餘額:"+balance+"]";
}
}
在包下建名為dao的包
1.建立資料庫
package com.example.bz0209.arrayadapter.dao;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
/**
* Created by Administrator on 2017/4/17.
*/
public class MyHelper extends SQLiteOpenHelper{
public static final String CREATE="create table account(id integer primary key autoincrement,name varchar(20),balance integer)";
public MyHelper(Context context,int version) {
super(context,"itcast.db", null,version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE);
Log.d("DBHelper","onCreate");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("drop table if exists account");
onCreate(sqLiteDatabase);
}
}
2.建立資料庫操作邏輯類
package com.example.bz0209.arrayadapter.dao;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.View;
import com.example.bz0209.arrayadapter.bean.Account;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017/4/17.
*/
public class AccountDao {
private MyHelper dbHelper;
public AccountDao(Context context) {
dbHelper=new MyHelper(context,2);
}
public void createDatabase(View view){
dbHelper.getReadableDatabase();
}
public void AddData(Account account){
SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put("name",account.getName());
contentValues.put("balance",account.getBalance());
long id=sqLiteDatabase.insert("account",null,contentValues);
account.setId(id);
contentValues.clear();
}
public int UpdateData(Account account){
SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put("name",account.getName());
contentValues.put("balance",account.getBalance());
int count= sqLiteDatabase.update("account",contentValues,"id=?",new String[]{account.getId()+""});
sqLiteDatabase.close();
return count;
}
public List<Account> QueryData(){
SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
Cursor cursor=sqLiteDatabase.query("book",null,null,null,null,null,"balance DESC");
List<Account> list=new ArrayList<>();
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());
}
cursor.close();
sqLiteDatabase.close();
return list;
}
public int DeleteData(long id){
SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
int account=sqLiteDatabase.delete("account","id=?",new String[]{id+""});
sqLiteDatabase.close();
return account;
}
}
MainActivitypackage com.example.bz0209.arrayadapter;
import android.app.Activity;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.os.Bundle;
import android.view.LayoutInflater;
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.arrayadapter.bean.Account;
import com.example.bz0209.arrayadapter.dao.AccountDao;
import java.util.List;
public class MainActivity extends Activity {
private ListView accountIV;
private List<Account> list;
private EditText nameET;
private EditText balanceET;
private AccountDao accountDao;
private AccountAdapter accountAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
accountDao=new AccountDao(this);
list=accountDao.QueryData();
accountAdapter=new AccountAdapter();
accountIV.setAdapter(accountAdapter);
}
private void initView() {
accountIV = (ListView) findViewById(R.id.accountLV);
nameET = (EditText) findViewById(R.id.nameET);
balanceET = (EditText) findViewById(R.id.balanceET);
accountIV.setOnItemClickListener(new MyOnItemClickListener());
}
private class MyOnItemClickListener implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Account a = (Account) adapterView.getItemAtPosition(i);
Toast.makeText(getApplicationContext(), a.toString(), Toast.LENGTH_LONG).show();
}
}
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));
accountDao.AddData(a);
list.add(a);
;accountAdapter.notifyDataSetChanged();
nameET.setText("");
balanceET.setText("");
}
private class AccountAdapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
final Account a = list.get(i);
View view;
ViewHolder viewHolder;
if (convertView == null) {
view = LayoutInflater.from(getApplication()).inflate(R.layout.item, null);
viewHolder = new ViewHolder();
viewHolder.nameTV = (TextView) view.findViewById(R.id.nameTV);
viewHolder.idTV = (TextView) view.findViewById(R.id.idTV);
viewHolder.balanceTV = (TextView) view.findViewById(R.id.balanceTV);
view.setTag(viewHolder);
} else {
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.balanceTV.setText(a.getBalance()+"");
viewHolder.nameTV.setText(a.getName());
viewHolder.idTV.setText(a.getId()+"");
ImageView upTV= (ImageView) view.findViewById(R.id.upIV);
ImageView downTV= (ImageView) view.findViewById(R.id.downIV);
ImageView deleteTV= (ImageView) view.findViewById(R.id.deleteTV);
upTV.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
a.setBalance(a.getBalance()+1);
notifyDataSetChanged();
accountDao.UpdateData(a);
}
});
downTV.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
a.setBalance(a.getBalance()-1);
notifyDataSetChanged();
accountDao.UpdateData(a);
}
});
deleteTV.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
android.content.DialogInterface.OnClickListener listener=new android.content.DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialogInterface, int which){
list.remove(a);
accountDao.DeleteData(a.getId());
notifyDataSetChanged();
}
};
AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
builder.setTitle("確定要刪除嗎");
builder.setPositiveButton("確定",listener);
builder.setNeutralButton("取消",null);
builder.show();
}
});
return view;
}
class ViewHolder {
TextView idTV;
TextView nameTV;
TextView balanceTV;
}
}
}