Android allows you to slide the user list information and select Delete.
During project development, you often need to delete the user list information. There are two common deletion methods in Android, one is similar to sliding the delete button, and the other is selecting through the CheckBox and then deleting through the button. The original Instance integrates the above two methods to delete the user list.
Design Concept: In the adapter class MyAdapter, a sliding delete button shows or hides a Map, a Map used to check whether the CheckBox is selected, and an interface ContentsDeleteListener that interacts with MainAcitivyt, this interface also contains two methods. The contentsDeleteSelect (int position, boolean isChecked) method is used to add or delete selected or canceled content from the selected List, contentDelete (int position) deletes a column entry at a specified position in the List. The sliding effect is mainly to display the sliding delete button when the sliding distance is greater than 40. When you perform the delete operation, all other settings are invisible and the CheckBox is set to unselected.
I. Code Implementation Effect
Ii. Code Implementation
1. activity_main.xml
The layout of the main interface is very simple. You can delete a Button and a ListView that stores user information.
2. activity_main_list_view.xml
The layout contains a selected CheckBox that displays the TextView of the content and a TextView that can be slide for deletion.
3. sliding effect anim_right_left.xml
4. CheckBox selector my_list_checekbox_selector.xml
5. User List adapter MyAdapter. java
Package com. example. slideandselectdeletedemo; import java. util. hashMap; import java. util. list; import java. util. map; import android. annotation. suppressLint; import android. content. context; import android. view. layoutInflater; import android. view. motionEvent; import android. view. view; import android. view. view. onClickListener; import android. view. view. onTouchListener; import android. view. animation. animation; import android. view. animation. animationUtils; import android. view. viewGroup; import android. widget. baseAdapter; import android. widget. checkBox; import android. widget. compoundButton; import android. widget. compoundButton. onCheckedChangeListener; import android. widget. relativeLayout; import android. widget. textView; import com. example. slidedeleteandselectdemo. r; @ SuppressLint ("UseSparseArrays") public class MyAdapter extends BaseAdapter {private LayoutInflater mInflater; private List
MContentsList; private Context mContext; private ContentsDeleteListener mContentsDeleteListener; // you can specify whether to display the private Map by swiping the delete button.
VisibleDeleteTv; // CheckBox selection and private Map not selected
SelectCb; // X coordinate point after sliding private int mLastX = 0; // private int mLastY = 0; public MyAdapter (Context mContext, List
MContentsList, ContentsDeleteListener mContentsDeleteListener) {this. mContext = mContext; this. mContentsList = mContentsList; this. mContentsDeleteListener = mContentsDeleteListener; this. mInflater = (LayoutInflater) mContext. getSystemService (Context. LAYOUT_INFLATER_SERVICE); visibleDeleteTv = new HashMap
(); SelectCb = new HashMap
(); // When updating the interface, the record is not selected and the delete button is not visible for (int I = 0; I <mContentsList. size (); I ++) {visibleDeleteTv. put (I, View. GONE); selectCb. put (I, false) ;}} public void updateView (List
MContentsList) {this. mContentsList = mContentsList; this. policydatasetchanged () ;}@ Overridepublic int getCount () {return mContentsList. size () ;}@ Overridepublic Object getItem (int position) {return mContentsList. get (position) ;}@ Overridepublic long getItemId (int position) {return position ;}@ Overridepublic View getView (final int position, View convertView, ViewGroup parent) {final HolderView holderView; I F (convertView = null) {holderView = new HolderView (); convertView = mInflater. inflate (R. layout. activity_main_list_view, null); holderView. listSelectCb = (CheckBox) convertView. findViewById (R. id. my_select_cb); holderView. listContentTv = (TextView) convertView. findViewById (R. id. my_content_ TV); holderView. listDeleteTv = (TextView) convertView. findViewById (R. id. my_delete_ TV); holderView. listRl = (Relative Layout) convertView. findViewById (R. id. my_rl); convertView. setTag (holderView);} else {holderView = (HolderView) convertView. getTag (); if (holderView. listSelectCb. isChecked () {holderView. listSelectCb. setChecked (false) ;}}// display the content holderView. listContentTv. setText (mContentsList. get (position); if (visibleDeleteTv! = Null) {holderView. listDeleteTv. setVisibility (visibleDeleteTv. get (position);} if (selectCb! = Null) {holderView. listSelectCb. setChecked (selectCb. get (position); mContentsDeleteListener. contentsDeleteSelect (position, selectCb. get (position);} // process the selected event holderView. listRl. setOnClickListener (new OnClickListener () {@ Overridepublic void onClick (View v) {if (visibleDeleteTv. containsValue (View. VISIBLE) {// when VISIBLE, click again to make the settings invisible. for (int I = 0; I <getCount (); I ++) {visibleDeleteTv. put (I, View. GONE); select Cb. put (I, false); mContentsDeleteListener. contentsDeleteSelect (I, false);} policydatasetchanged ();} else {boolean isChecked = holderView. listSelectCb. isChecked ()? False: true; holderView. listSelectCb. setChecked (isChecked); mContentsDeleteListener. contentsDeleteSelect (position, isChecked) ;}}); holderView. listSelectCb. setOnCheckedChangeListener (new OnCheckedChangeListener () {@ Overridepublic void onCheckedChanged (CompoundButton buttonView, boolean isChecked) {mContentsDeleteListener. contentsDeleteSelect (position, isChecked) ;}}); holderView. listSelectCb. setOnClickListener (new OnClickListener () {@ Overridepublic void onClick (View v) {if (visibleDeleteTv. containsValue (View. VISIBLE) {for (int I = 0; I <getCount (); I ++) {visibleDeleteTv. put (I, View. GONE); selectCb. put (I, false); mContentsDeleteListener. contentsDeleteSelect (I, false) ;}notifydatasetchanged () ;}}); convertView. setOnTouchListener (new OnTouchListener () {@ Overridepublic boolean onTouch (View v, MotionEvent event) {final Animation alpha = AnimationUtils. loadAnimation (mContext, R. anim. anim_right_left); int x = (int) event. getX (); // int y = (int) event. getY (); // Log. d (TAG, "x =" + x + "y =" + y); // press downif (event. getAction () = MotionEvent. ACTION_DOWN) {alpha. cancel ();} else if (event. getAction () = MotionEvent. ACTION_MOVE) {alpha. cancel (); int deltaX = mLastX-x; // int deltaY = mLastY-y; // Log. d (TAG, "deltaX =" + deltaX + ", deltaY =" + deltaY); if (deltaX> 40) {// when the sliding distance is greater than 40, display the deletion buttons for (int I = 0; I <getCount (); I ++) {visibleDeleteTv. put (I, View. GONE); selectCb. put (I, false); mContentsDeleteListener. contentsDeleteSelect (I, false); if (I = position) {visibleDeleteTv. put (position, View. VISIBLE); selectCb. put (I, true); mContentsDeleteListener. contentsDeleteSelect (I, true); if (visibleDeleteTv. get (position) = View. VISIBLE) {holderView. listDeleteTv. startAnimation (alpha) ;}}notifydatasetchanged () ;}return true ;}else {// otheralpha. cancel () ;}mlastx = x; // mLastY = y; return false ;}}); holderView. listDeleteTv. setOnClickListener (new OnClickListener () {@ Overridepublic void onClick (View v) {// Log. d (TAG, "onClick: position =" + position); mContentsList. remove (position); mContentsDeleteListener. contentDelete (position); for (int I = 0; I <mContentsList. size (); I ++) {visibleDeleteTv. put (I, View. GONE); selectCb. put (I, false); mContentsDeleteListener. revoke (I, false);} yydatasetchanged () ;}}); return convertView;} public class HolderView {public TextView listContentTv, listDeleteTv; public CheckBox listSelectCb; public RelativeLayout listRl ;} public void setContentsDeleteListener (ContentsDeleteListener mContentsDeleteListener) {this. mContentsDeleteListener = mContentsDeleteListener;}/*** interface used to delete content ** @ author liangming. deng **/public interface ContentsDeleteListener {/*** select and cancel the specified location * @ param position * @ param isChecked */public void contentsDeleteSelect (int position, boolean isChecked);/*** Delete the content of a specified position * @ param position */public void contentDelete (int position);} public void setVisibleDeleteTv (Map
VisibleDeleteTv) {this. visibleDeleteTv = visibleDeleteTv;} public void setSelectCb (Map
SelectCb) {this. selectCb = selectCb ;}}
5. Main Interface code MainActivity. java
Package com. example. slideandselectdeletedemo; import java. util. arrayList; import java. util. collections; import java. util. list; import android. app. activity; import android. OS. bundle; import android. view. menu; import android. view. menuItem; import android. view. view; import android. view. view. onClickListener; import android. widget. button; import android. widget. listView; import com. example. slideandselectdeletedemo. myAdapter. contentsDeleteListener; import com. example. slidedeleteandselectdemo. r; public class MainActivity extends Activity implements ContentsDeleteListener, OnClickListener {private ListView myLv; private Button myDeleteBtn; private MyAdapter myAdapter; private String [] myContentsArray; private List
MyContentsList = new ArrayList
(); Private List
MySelectedList = new ArrayList
(); @ Overrideprotected void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R. layout. activity_main); findById (); myContentsArray = this. getResources (). getStringArray (R. array. my_contents); if (myContentsArray! = Null) {Collections. addAll (myContentsList, myContentsArray);} myAdapter = new MyAdapter (this, myContentsList, this); myLv. setAdapter (myAdapter);} private void findById () {myLv = (ListView) this. findViewById (R. id. my_lv); myDeleteBtn = (Button) this. findViewById (R. id. my_delete_btn); myDeleteBtn. setOnClickListener (this) ;}@ Overridepublic void onResume () {super. onResume () ;}@ Overridepublic boolean onCreateOptionsMenu (Menu menu) {// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater (). inflate (R. menu. main, menu); return true ;}@ Overridepublic boolean onOptionsItemSelected (MenuItem item) {// Handle action bar item clicks here. the action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml.int id = item. getItemId (); if (id = R. id. action_settings) {return true;} return super. onOptionsItemSelected (item);}/** Based on isChecked, add or delete data to or from the selected List * (non-Javadoc) * @ see com. example. slideandselectdeletedemo. myAdapter. contentsDeleteListener # contentsDeleteSelect (int, boolean) */@ Overridepublic void contentsDeleteSelect (int position, boolean isChecked) {if (isChecked) {mySelectedList. add (myContentsList. get (position);} else {mySelectedList. remove (myContentsList. get (position) ;}}/** delete data at the specified position * (non-Javadoc) * @ see com. example. slideandselectdeletedemo. myAdapter. contentsDeleteListener # contentDelete (int) */@ Overridepublic void contentDelete (int position) {// TODO Auto-generated method stubmyContentsList. remove (position) ;}@ Overridepublic void onClick (View v) {// TODO Auto-generated method stubswitch (v. getId () {case R. id. my_delete_btn: myContentsList. removeAll (mySelectedList); myAdapter. updateView (myContentsList); break ;}}}
Analysis: mySelectedList is used to store information about the CheckBox selected list. The delete button is convenient for deleting all selected items.
The above sections provide comments.
Source Code address: http://download.csdn.net/detail/a123demi/7751141