Android 长按Listview显示CheckBox,实现批量删除【转】
来源:互联网 发布:粉尘检测数据 编辑:程序博客网 时间:2024/05/29 16:19
来自:http://www.cnblogs.com/LIANQQ/p/3584374.html
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 stub100 super.onCreateContextMenu(menu, v, menuInfo);101 menu.setHeaderTitle("操作");102 }103 104 /**105 * @author ieasy360_1106 * 自定义Adapter107 */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 ;//用来记录是否显示checkBox113 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 stub139 return array.size();140 }141 142 public Object getItem(int position) {143 // TODO Auto-generated method stub144 return array.get(position);145 }146 147 public long getItemId(int position) {148 // TODO Auto-generated method stub149 return 0;150 }151 152 public View getView(final int position, View convertView, ViewGroup parent) {153 // TODO Auto-generated method stub154 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 stub172 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 stub196 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 }
0 0
- Android 长按Listview显示CheckBox,实现批量删除【转】
- Android 长按Listview显示CheckBox,实现批量删除。
- Android 长按Listview显示CheckBox,实现批量删除。
- Android 长按Listview显示CheckBox,实现批量删除。
- Android 长按Listview显示CheckBox,实现批量删除
- Android 长按Listview显示CheckBox,实现批量删除
- Android ListView长按弹出CheckBox,实现全选,反选,批量删除功能
- 【android】ListView+SimpleCursorAdapter+checkbox实现批量删除
- android]ListView+SimpleCursorAdapter+checkbox实现批量删除
- ListView长按Item显示CheckBox并进行批量删除操作
- ListView长按出现CheckBox实现选择性删除
- ListView加CheckBox简单实现批量删除
- Android中长按ListView实现批量删除
- android(2)在listView中设置长按显示button,实现删除item
- Android ListView和CheckBox应用之批量删除操作
- Android ListView和CheckBox应用之批量删除操作
- Android ListView和CheckBox应用之批量删除操作
- Android ListView和CheckBox应用之批量删除操作
- POJ 1961 Period【KMP最小循环节】
- char、short、long、double占几个字节,32位机中
- 数据类型
- scala-Problem01-05
- nginx常用的流量分离技术
- Android 长按Listview显示CheckBox,实现批量删除【转】
- Docker多容器部署
- Android权限汇集
- Android中的Adapter 详解(一)
- 操作系统的相关计算题
- 138. Copy List with Random Pointer
- 单片机上课笔记
- 树莓派使用USB摄像头和motion实现监控
- Think in Java中多线程所接触到且需要学习的类和接口