Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 長按Listview顯示CheckBox,實現批量刪除。

Android 長按Listview顯示CheckBox,實現批量刪除。

編輯:關於Android編程

ListView實現的列表,如果是可編輯,可刪除的,一般都要提供批量刪除功能,否則的話,一項一項的刪除體驗很不好,也給用戶帶來了很大的麻煩。   實現效果圖       具體實現代碼   select.xml   主布局文件包含一個ListView還有一個隱藏的布局,包含了兩個Button一個TextView,默認布局為gone,當監聽到長按響應事件時候顯示。     復制代碼  1 <?xml version="1.0" encoding="utf-8"?>  2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  3     android:layout_width="match_parent"  4     android:layout_height="match_parent"  5     android:orientation="vertical" >  6       7     <ListView   8           9         android:id="@+id/list" 10         android:layout_width="match_parent" 11         android:layout_height="match_parent" 12         android:layout_weight="1" 13         android:cacheColorHint="#FFF" > 14  15         </ListView> 16          17     <RelativeLayout  18          19         android:id="@+id/relative" 20         android:layout_width="fill_parent" 21         android:layout_height="50dp" 22         android:gravity="bottom" 23         android:background="@color/lemonchiffon" 24         android:visibility="gone" 25         > 26         <Button  27              28             android:id="@+id/cancle" 29             android:layout_width="wrap_content" 30             android:layout_height="wrap_content" 31             android:text="撤銷    |" 32             android:textSize="20sp" 33             android:background="@null" 34             android:layout_centerVertical="true" 35              36             /> 37         <TextView  38              39             android:id="@+id/txtcount" 40             android:layout_width="wrap_content" 41             android:layout_height="wrap_content" 42             android:text="共計" 43             android:textSize="15sp" 44             android:layout_centerInParent="true" 45              46             /> 47          48         <Button  49              50             android:id="@+id/delete" 51             android:layout_width="wrap_content" 52             android:layout_height="wrap_content" 53             android:text="|  刪除" 54             android:textSize="20sp" 55             android:background="@null" 56             android:layout_alignParentRight="true" 57             android:layout_centerVertical="true" 58             /> 59          60          61     </RelativeLayout> 62 </LinearLayout> 復制代碼 item.xml   包含一個TextView 一個CheckBox     復制代碼  1 <?xml version="1.0" encoding="utf-8"?>  2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  3     android:layout_width="match_parent"  4     android:layout_height="match_parent"  5     android:orientation="horizontal" >  6      7     <TextView  8         android:id="@+id/txtName"  9         android:layout_width="match_parent" 10         android:layout_height="wrap_content" 11         android:layout_alignParentLeft="true" 12         android:layout_centerVertical="true" 13         android:layout_gravity="center_vertical" 14         android:layout_marginLeft="5dp" 15         android:layout_weight="1" 16         android:text="444444444444" 17         android:textSize="17sp" 18         android:textColor="#333" /> 19      20     <CheckBox  21         android:id="@+id/check" 22         android:layout_width="wrap_content" 23         android:layout_height="wrap_content" 24         android:visibility="gone" 25         android:clickable="false" 26         /> 27 </LinearLayout> 復制代碼 通過自定義Adapter綁定ListView數據源,實現長按監聽,在長按監聽時候,切記將監聽事件返回ture。     復制代碼   1 /**   2      * @author ieasy360_1   3      * 自定義Adapter   4      */   5     class Adapter extends BaseAdapter{   6         private Context context;   7         private LayoutInflater inflater=null;   8         private HashMap<Integer, View> mView ;   9         public  HashMap<Integer, Integer> visiblecheck ;//用來記錄是否顯示checkBox  10         public  HashMap<Integer, Boolean> ischeck;  11         private TextView txtcount;  12         public Adapter(Context context,TextView txtcount)  13         {  14             this.context = context;  15             this.txtcount = txtcount;  16             inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  17             mView = new HashMap<Integer, View>();  18             visiblecheck = new HashMap<Integer, Integer>();  19             ischeck      = new HashMap<Integer, Boolean>();  20             if(isMulChoice){  21                 for(int i=0;i<array.size();i++){  22                     ischeck.put(i, false);  23                     visiblecheck.put(i, CheckBox.VISIBLE);  24                 }  25             }else{  26                 for(int i=0;i<array.size();i++)  27                 {  28                     ischeck.put(i, false);  29                     visiblecheck.put(i, CheckBox.INVISIBLE);  30                 }  31             }  32         }  33   34         public int getCount() {  35             // TODO Auto-generated method stub  36             return array.size();  37         }  38   39         public Object getItem(int position) {  40             // TODO Auto-generated method stub  41             return array.get(position);  42         }  43   44         public long getItemId(int position) {  45             // TODO Auto-generated method stub  46             return 0;  47         }  48   49         public View getView(final int position, View convertView, ViewGroup parent) {  50             // TODO Auto-generated method stub  51             View view = mView.get(position);  52             if(view==null)  53             {  54                 view = inflater.inflate(R.layout.item, null);  55                 TextView txt = (TextView)view.findViewById(R.id.txtName);  56                 final CheckBox ceb = (CheckBox)view.findViewById(R.id.check);  57                   58                 txt.setText(array.get(position));  59                   60                 ceb.setChecked(ischeck.get(position));  61                 ceb.setVisibility(visiblecheck.get(position));  62                   63                 view.setOnLongClickListener(new Onlongclick());  64                   65                 view.setOnClickListener(new OnClickListener() {  66                       67                     public void onClick(View v) {  68                         // TODO Auto-generated method stub  69                         if(isMulChoice){  70                             if(ceb.isChecked()){  71                                 ceb.setChecked(false);  72                                 selectid.remove(array.get(position));  73                             }else{  74                                 ceb.setChecked(true);  75                                 selectid.add(array.get(position));  76                             }  77                             txtcount.setText("共選擇了"+selectid.size()+"項");  78                         }else {  79                             Toast.makeText(context, "點擊了"+array.get(position), Toast.LENGTH_LONG).show();  80                         }  81                     }  82                 });  83                   84                 mView.put(position, view);  85             }  86             return view;  87         }  88           89         class Onlongclick implements OnLongClickListener{  90   91             public boolean onLongClick(View v) {  92                 // TODO Auto-generated method stub  93                   94                 isMulChoice = true;  95                 selectid.clear();  96                 layout.setVisibility(View.VISIBLE);  97                 for(int i=0;i<array.size();i++)  98                 {  99                     adapter.visiblecheck.put(i, CheckBox.VISIBLE); 100                 } 101                 adapter = new Adapter(context,txtcount); 102                 listview.setAdapter(adapter); 103                 return true; 104             } 105         } 106     } 復制代碼 全部實現代碼     復制代碼   1 package com.example.test;   2 import java.util.ArrayList;   3 import java.util.HashMap;   4 import java.util.List;   5 import android.app.Activity;   6 import android.content.Context;   7 import android.os.Bundle;   8 import android.view.ContextMenu;   9 import android.view.ContextMenu.ContextMenuInfo;  10 import android.view.LayoutInflater;  11 import android.view.View;  12 import android.view.View.OnClickListener;  13 import android.view.View.OnLongClickListener;  14 import android.view.ViewGroup;  15 import android.widget.BaseAdapter;  16 import android.widget.Button;  17 import android.widget.CheckBox;  18 import android.widget.ListView;  19 import android.widget.RelativeLayout;  20 import android.widget.TextView;  21 import android.widget.Toast;  22   23 /**  24  * @author ieasy360_1  25  *   26  */  27 public class MulSelect extends Activity implements OnClickListener {  28       29     private ListView listview;  30     private Context  context;  31     private List<String> array = new ArrayList<String>();  32     private List<String> selectid = new ArrayList<String>();  33     private boolean isMulChoice = false; //是否多選  34     private Adapter  adapter;  35     private RelativeLayout layout;  36     private Button cancle,delete;  37     private TextView txtcount;  38   39     @Override  40     protected void onCreate(Bundle savedInstanceState) {  41         // TODO Auto-generated method stub  42         super.onCreate(savedInstanceState);  43         setContentView(R.layout.select);  44         context = this;  45         listview = (ListView)findViewById(R.id.list);  46         layout = (RelativeLayout)findViewById(R.id.relative);  47         txtcount = (TextView)findViewById(R.id.txtcount);  48         cancle   = (Button)findViewById(R.id.cancle);  49         delete   = (Button)findViewById(R.id.delete);  50         cancle.setOnClickListener(this);  51         delete.setOnClickListener(this);  52         init();  53         adapter = new Adapter(context,txtcount);  54         listview.setAdapter(adapter);  55           56     }  57       58     void init()  59     {  60         for(int i=0;i<20;i++)  61         {  62             array.add("小明"+i);  63         }  64     }  65       66     public void onClick(View v) {  67         // TODO Auto-generated method stub  68         switch (v.getId()) {  69         case R.id.cancle:  70             isMulChoice = false;  71             selectid.clear();  72             adapter = new Adapter(context,txtcount);  73             listview.setAdapter(adapter);  74             layout.setVisibility(View.INVISIBLE);  75             break;  76         case R.id.delete:  77             isMulChoice =false;  78             for(int i=0;i<selectid.size();i++){  79                 for(int j=0;j<array.size();j++){  80                     if(selectid.get(i).equals(array.get(j))){  81                         array.remove(j);  82                     }  83                 }  84             }  85             selectid.clear();  86             adapter = new Adapter(context,txtcount);  87             listview.setAdapter(adapter);  88             layout.setVisibility(View.INVISIBLE);  89             break;  90         default:  91             break;  92         }  93           94     }  95       96     @Override  97     public void onCreateContextMenu(ContextMenu menu, View v,  98             ContextMenuInfo menuInfo) {  99         // TODO Auto-generated method stub 100         super.onCreateContextMenu(menu, v, menuInfo); 101         menu.setHeaderTitle("操作"); 102     } 103  104     /** 105      * @author ieasy360_1 106      * 自定義Adapter 107      */ 108     class Adapter extends BaseAdapter{ 109         private Context context; 110         private LayoutInflater inflater=null; 111         private HashMap<Integer, View> mView ; 112         public  HashMap<Integer, Integer> visiblecheck ;//用來記錄是否顯示checkBox 113         public  HashMap<Integer, Boolean> ischeck; 114         private TextView txtcount; 115         public Adapter(Context context,TextView txtcount) 116         { 117             this.context = context; 118             this.txtcount = txtcount; 119             inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 120             mView = new HashMap<Integer, View>(); 121             visiblecheck = new HashMap<Integer, Integer>(); 122             ischeck      = new HashMap<Integer, Boolean>(); 123             if(isMulChoice){ 124                 for(int i=0;i<array.size();i++){ 125                     ischeck.put(i, false); 126                     visiblecheck.put(i, CheckBox.VISIBLE); 127                 } 128             }else{ 129                 for(int i=0;i<array.size();i++) 130                 { 131                     ischeck.put(i, false); 132                     visiblecheck.put(i, CheckBox.INVISIBLE); 133                 } 134             } 135         } 136  137         public int getCount() { 138             // TODO Auto-generated method stub 139             return array.size(); 140         } 141  142         public Object getItem(int position) { 143             // TODO Auto-generated method stub 144             return array.get(position); 145         } 146  147         public long getItemId(int position) { 148             // TODO Auto-generated method stub 149             return 0; 150         } 151  152         public View getView(final int position, View convertView, ViewGroup parent) { 153             // TODO Auto-generated method stub 154             View view = mView.get(position); 155             if(view==null) 156             { 157                 view = inflater.inflate(R.layout.item, null); 158                 TextView txt = (TextView)view.findViewById(R.id.txtName); 159                 final CheckBox ceb = (CheckBox)view.findViewById(R.id.check); 160                  161                 txt.setText(array.get(position)); 162                  163                 ceb.setChecked(ischeck.get(position)); 164                 ceb.setVisibility(visiblecheck.get(position)); 165                  166                 view.setOnLongClickListener(new Onlongclick()); 167                  168                 view.setOnClickListener(new OnClickListener() { 169                      170                     public void onClick(View v) { 171                         // TODO Auto-generated method stub 172                         if(isMulChoice){ 173                             if(ceb.isChecked()){ 174                                 ceb.setChecked(false); 175                                 selectid.remove(array.get(position)); 176                             }else{ 177                                 ceb.setChecked(true); 178                                 selectid.add(array.get(position)); 179                             } 180                             txtcount.setText("共選擇了"+selectid.size()+"項"); 181                         }else { 182                             Toast.makeText(context, "點擊了"+array.get(position), Toast.LENGTH_LONG).show(); 183                         } 184                     } 185                 }); 186                  187                 mView.put(position, view); 188             } 189             return view; 190         } 191          192         class Onlongclick implements OnLongClickListener{ 193  194             public boolean onLongClick(View v) { 195                 // TODO Auto-generated method stub 196                  197                 isMulChoice = true; 198                 selectid.clear(); 199                 layout.setVisibility(View.VISIBLE); 200                 for(int i=0;i<array.size();i++) 201                 { 202                     adapter.visiblecheck.put(i, CheckBox.VISIBLE); 203                 } 204                 adapter = new Adapter(context,txtcount); 205                 listview.setAdapter(adapter); 206                 return true; 207             } 208         } 209     } 210 }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved