ListView 批量删除、数据库同步
来源:互联网 发布:mysql语句sql union 编辑:程序博客网 时间:2024/06/14 12:07
ListView批量删除的动画实现和数据库同步
参考:凯子哥blog
需要两个jar包
com.haarman.listviewanimations-2.5.1.jar
nieoldandroids-2.4.0.jar
效果图
实现代码
- 布局文件
list_view_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="63dp" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="2dp" android:background="#11000000"/> <LinearLayout android:id="@+id/llLayout" android:layout_width="match_parent" android:layout_height="60dp" android:orientation="horizontal"> <CheckBox android:id="@+id/chb" android:layout_marginLeft="10dp" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="invisible" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false"/> <ImageView android:id="@+id/ivContact" android:layout_marginLeft="3dp" android:layout_width="56dp" android:layout_height="56dp" android:src="@drawable/ic_account_circle_black_24dp"/> <TextView android:id="@+id/tvName" android:layout_width="60dp" android:layout_height="46dp" android:text="Mike" android:gravity="center" android:layout_gravity="center" android:textSize="18dp"/> <TextView android:id="@+id/tvPhone" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="46dp" android:text="1565937591" android:gravity="center" android:textSize="26dp"/> </LinearLayout> </LinearLayout></LinearLayout>
- 布局文件
activity_list_view.xml
<?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:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.studio.wythe.wind.listView"> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/lvList"/></RelativeLayout>
- 数据库文件
DatabaseManager.java
package com.studio.wythe.wind;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import com.amap.api.maps.model.LatLng;/** * Created by admin on 2016/1/27. */public class DatabaseManager extends SQLiteOpenHelper{ public static final int DATABASE_VERSION = 1; public static final String DATABASE_NAME = "DATABASE"; public static final String LATLNG_TABLE = "LATLNG"; public static final String LATLNG_LATITUDE = "LATITUDE";//纬度 public static final String LATLNG_LONGTITUDE = "LONGTITUDE";//经度 public static final String LATLNG_ID = "ID"; public static final String CONTACT_TABLE = "CONTACT"; public static final String CONTACT_PHONE_NUM = "PHOMENUM"; public static final String CONTACT_NAME = "NAME"; public static final String CONTACT_ID = "ID"; public static SQLiteDatabase sqlDB; public DatabaseManager(Context context){ super(context,DATABASE_NAME,null,DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase sqlDB) { String CREATE_LATLNG_TABLE = "CREATE TABLE "+LATLNG_TABLE+"(" +LATLNG_ID+" INTEGER PRIMARY KEY AUTOINCREMENT"+"," +LATLNG_LATITUDE+" INTEGER"+"," +LATLNG_LONGTITUDE+" INTEGER"+")"; sqlDB.execSQL(CREATE_LATLNG_TABLE); String CREATE_CONTACT_TABLE = "CREATE TABLE "+CONTACT_TABLE+"(" +CONTACT_ID+" INTEGER PRIMARY KEY AUTOINCREMENT"+"," +CONTACT_NAME+" TEXT"+"," +CONTACT_PHONE_NUM+" TEXT"+")"; sqlDB.execSQL(CREATE_CONTACT_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } public void insertRow (LatLng latLng){ this.sqlDB = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(LATLNG_LATITUDE,latLng.latitude); values.put(LATLNG_LONGTITUDE,latLng.longitude); this.sqlDB.insert(LATLNG_TABLE, null, values); closeContactsManager(); } public void deletRow(int id){ this.sqlDB = this.getWritableDatabase(); this.sqlDB.delete(LATLNG_TABLE, "id=?", new String[]{Integer.toString(id)}); closeContactsManager(); } public Cursor execQuery(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy ){ this.sqlDB = this.getReadableDatabase(); Cursor cursor = this.sqlDB.query(table,columns,selection,selectionArgs,groupBy,having,orderBy); return cursor; } public void closeContactsManager(){ this.sqlDB.close(); }}
- listView文件
MyListView.java
package com.studio.wythe.wind;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.ActionMode;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import com.haarman.listviewanimations.itemmanipulation.AnimateDismissAdapter;import com.haarman.listviewanimations.itemmanipulation.OnDismissCallback;import java.util.ArrayList;import java.util.Iterator;public class MyListView extends AppCompatActivity { private CustomAdapter customAdapter; private boolean isInActionMode; private boolean isInDeleteMode = false; private AnimateDismissAdapter<Model> mAnimateDismissAdapter; private ArrayList<Integer> mCheckedPositions; private ListView lvList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_view); lvList = (ListView) findViewById(R.id.lvList); storeDataToDB(); showDBDebugInfo(); customAdapter = new CustomAdapter(); mCheckedPositions = new ArrayList<Integer>(); mAnimateDismissAdapter = new AnimateDismissAdapter<Model>( customAdapter,new CustomDismissCallback()); mAnimateDismissAdapter.setAbsListView(lvList); lvList.setAdapter(mAnimateDismissAdapter); lvList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); lvList.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { @Override public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { Toast.makeText(getApplicationContext(),""+lvList.getCheckedItemCount(), Toast.LENGTH_SHORT).show(); customAdapter.models.get(position).setChecked(checked); customAdapter.notifyDataSetChanged(); mode.setSubtitle(lvList.getCheckedItemCount() +" item selected"); if(mCheckedPositions.contains(position)&&!checked){ mCheckedPositions.remove(Integer.valueOf(position));// Toast.makeText(getApplicationContext(),"contition 1",Toast.LENGTH_SHORT).show(); }else{ mCheckedPositions.add(position);// Toast.makeText(getApplicationContext(),"contition 2",Toast.LENGTH_SHORT).show(); } } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.context_menu,menu); mode.setTitle("Delete"); isInActionMode = true; isInDeleteMode = false; return true; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.delete: mAnimateDismissAdapter.animateDismiss(mCheckedPositions); isInDeleteMode = true; mode.finish(); return true; default: return false; } } @Override public void onDestroyActionMode(ActionMode mode) { if(!isInDeleteMode){ for(Model model:customAdapter.models){ model.setChecked(false); } mCheckedPositions.clear(); } isInActionMode=false; } }); } public final class ViewHolder{ public ImageView img; public TextView phone; public CheckBox checkBok; public TextView name; } public class CustomAdapter extends BaseAdapter { private ArrayList<Model> models; public CustomAdapter(){ models = new ArrayList<Model>(); DatabaseManager DBManager = new DatabaseManager(MyListView.this); SQLiteDatabase db = DBManager.getWritableDatabase(); Cursor cursor = db.query(DBManager.CONTACT_TABLE,null,DBManager.CONTACT_NAME+" LIKE ?", new String[]{"Mike%"},null,null,DBManager.CONTACT_NAME); while(cursor.moveToNext()){ String phoneNum = cursor.getString(cursor.getColumnIndex(DBManager.CONTACT_PHONE_NUM)); String name = cursor.getString(cursor.getColumnIndex(DBManager.CONTACT_NAME)); models.add(new Model(phoneNum,name)); } db.close(); } @Override public int getCount() { return models.size(); } @Override public Object getItem(int position) { return models.get(position); } @Override public long getItemId(int position) { return position; } //更新每个ListView的Item的显示状态 @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; Model model = customAdapter.models.get(position); if(convertView == null){ convertView = getLayoutInflater().inflate( R.layout.list_view_item,parent,false); viewHolder = new ViewHolder(); viewHolder.img = (ImageView) convertView.findViewById(R.id.ivContact); viewHolder.phone = (TextView) convertView.findViewById(R.id.tvPhone); viewHolder.checkBok = (CheckBox) convertView.findViewById(R.id.chb); viewHolder.name = (TextView) convertView.findViewById(R.id.tvName); convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.phone.setText(model.getPhoneNum()); viewHolder.checkBok.setChecked(model.isChecked()); viewHolder.name.setText(model.getName()); viewHolder.checkBok.setVisibility(isInActionMode? View.VISIBLE:View.GONE); return convertView; } } //数据类,为每个item提供数据 public class Model{ private String phoneNum; private boolean isChecked; private String name; public Model(String phoneNum,String name){ this.phoneNum = phoneNum; this.name = name; this.isChecked = false; } public String getPhoneNum(){ return phoneNum; } public String getName(){ return this.name; } public boolean isChecked(){ return isChecked; } public void setPhoneNum(String phoneNum){ this.phoneNum = phoneNum; } public void setChecked(boolean isChecked){ this.isChecked = isChecked; } } //删除动画完成后调用的接口,处理数据库的数据同步 private class CustomDismissCallback implements OnDismissCallback { @Override public void onDismiss(AbsListView absListView, int[] ints) { mCheckedPositions.clear(); Iterator<Model> iterator = customAdapter.models.iterator(); for(int i = 0; i < customAdapter.models.size(); i++){ DatabaseManager DBManager = new DatabaseManager(MyListView.this); SQLiteDatabase db = DBManager.getWritableDatabase(); if(customAdapter.models.get(i).isChecked) { db.delete(DBManager.CONTACT_TABLE, DBManager.CONTACT_NAME + " = ?", new String[]{customAdapter.models.get(i).getName()}); } } while(iterator.hasNext()){ if(iterator.next().isChecked){ iterator.remove(); } } //更新ListView customAdapter.notifyDataSetChanged(); } } private void storeDataToDB(){ DatabaseManager DBManager = new DatabaseManager(this); SQLiteDatabase db = DBManager.getWritableDatabase(); ContentValues cv = new ContentValues(); for(int i= 0; i < 10; i++){ String phoneNum = "1565937759"+i; String name = "Mike"+i; cv.put(DBManager.CONTACT_PHONE_NUM,phoneNum); cv.put(DBManager.CONTACT_NAME,name); db.insert(DBManager.CONTACT_TABLE,null,cv); } db.close(); } private void showDBDebugInfo(){ DatabaseManager DBManager = new DatabaseManager(this); SQLiteDatabase db = DBManager.getReadableDatabase(); Cursor cursor = db.query(DBManager.CONTACT_TABLE,null,DBManager.CONTACT_NAME+" LIKE ?", new String[]{"Mike%"},null,null,DBManager.CONTACT_NAME); while(cursor.moveToNext()){ Log.i("DatabaseDebug",cursor.getString(cursor.getColumnIndex(DBManager.CONTACT_NAME)) +" "+cursor.getString(cursor.getColumnIndex(DBManager.CONTACT_PHONE_NUM))); } db.close(); }}
0 0
- ListView 批量删除、数据库同步
- listview批量删除
- Android:ListView批量删除
- ListView批量删除数据
- 利用ListView批量删除item
- 利用ListView批量删除item .
- ListView多选批量删除
- ListView批量删除Item条目
- 利用ListView批量删除item
- 批量删除数据库记录
- 批量删除数据库表
- Mysql批量删除数据库
- 【android】ListView+SimpleCursorAdapter+checkbox实现批量删除
- android]ListView+SimpleCursorAdapter+checkbox实现批量删除
- Android中长按ListView实现批量删除
- listview+checkBox的全选,批量删除
- ListView加CheckBox简单实现批量删除
- ListView中CheckBox批量删除item
- Hadoop 2.2.0编译hadoop-eclipse-plugin插件
- binary search---Sqrt(x)
- UVA 12665(数学)
- 代码补全占位符
- maven Assembly Basics
- ListView 批量删除、数据库同步
- 如何通过命令提示符查看文本文档
- spring-jdbc文件数据库配置加密
- ubuntu下配置tomcat服务器
- 10003---Linux中的ls命令详细使用
- Android UI效果之绘图篇(二):Canvas
- 解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误
- leetcode刷题系列C++-Gas Station
- `GLIBCXX_3.4.15' not found