关于listview的全选、反选、取消、删除等操作
一般listview的每个item都有点击事件,一个item一个点击事件是没有问题的。
当一个item中出现多个点击效果时,并且还要保留item的点击效果,我们该怎么处理呢?
这时我们需要用到这个属性(一般写在item的布局上)
这个属性的作用就是:阻止焦点向子控件传递。
android:descendantFocusability="blocksDescendants"
单个控件时使用:
android:focusable="false"
这个需要注意一下,Demo如下:
Activity布局:
<LinearLayout android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:orientation="horizontal"><Buttonandroid:id="@+id/mBt_all"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="全选"android:onClick="onClick"android:textColor="#0000ff"android:background="@color/colorAccent"android:layout_weight="1"android:layout_margin="5dp"/><Buttonandroid:id="@+id/mBt_un_all"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="反选"android:onClick="onClick"android:textColor="#0000ff"android:background="@color/colorAccent"android:layout_weight="1"android:layout_margin="5dp"/><Buttonandroid:id="@+id/mBt_cancle"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="取消"android:onClick="onClick"android:textColor="#0000ff"android:background="@color/colorAccent"android:layout_weight="1"android:layout_margin="5dp"/><Buttonandroid:id="@+id/mBt_delete"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="删除"android:onClick="onClick"android:textColor="#0000ff"android:background="@color/colorAccent"android:layout_weight="1"android:layout_margin="5dp"/></LinearLayout><ListViewandroid:id="@+id/mListView"android:overScrollMode="never"android:divider="@color/colorAccent"android:dividerHeight="0.1dp"android:layout_width="match_parent"android:layout_height="match_parent"></ListView></LinearLayout>
item布局:
<RelativeLayout android:layout_width="match_parent"android:layout_height="60dp"android:descendantFocusability="blocksDescendants"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"><TextViewandroid:id="@+id/mTe_item"android:layout_width="match_parent"android:layout_height="30dp"android:layout_margin="5dp"android:layout_centerVertical="true"/><CheckBoxandroid:id="@+id/mCb_item"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"/></RelativeLayout>
完整代码:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private List<String> list;private List<Boolean> checks;private ListView listView;private MyAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView = findViewById(R.id.mListView);
// 添加数据initData();}private void initData() {list = new ArrayList<>();checks = new ArrayList<>();for (int i = 0; i < 30; i++) {list.add("数据"+i);checks.add(false);}adapter = new MyAdapter(this, list);adapter.setData(list, checks);listView.setAdapter(adapter);// 条目点击listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {Toast.makeText(MainActivity.this, "item点击了", Toast.LENGTH_SHORT).show();checks.set(position, !checks.get(position));adapter.setData(list, checks);adapter.notifyDataSetChanged();}});}
// 按钮点击public void onClick(View view) {switch (view.getId()) {case R.id.mBt_all:select_All();break;case R.id.mBt_un_all:select_UnAll();break;case R.id.mBt_cancle:select_cancle();break;case R.id.mBt_delete:select_delete();break;}}// 删除private void select_delete() {for (int i = 0; i < checks.size(); i++) {
// 判断是否选中,清除多选按钮,数据,以及索引if (checks.get(i)) {checks.remove(i);list.remove(i);i--;}adapter.setData(list, checks);adapter.notifyDataSetChanged();}}// 取消private void select_cancle() {for (int i = 0; i < checks.size(); i++) {checks.set(i, false);}adapter.setData(list, checks);adapter.notifyDataSetChanged();}// 反选private void select_UnAll() {for (int i = 0; i < checks.size(); i++) {checks.set(i, !checks.get(i));}adapter.setData(list, checks);adapter.notifyDataSetChanged();}//全选private void select_All() {for (int i = 0; i < checks.size(); i++) {checks.set(i, true);}adapter.setData(list, checks);adapter.notifyDataSetChanged();}
}
Adapter:
public class MyAdapter extends BaseAdapter {private Context mContext;private List<String> mList;private List<Boolean> checks;public MyAdapter(Context mContext, List<String> mList) {this.mContext = mContext;this.mList = mList;}public void setData(List<String> mList,List<Boolean> checks) {this.mList = mList;this.checks = checks;}@Overridepublic int getCount() {return mList==null?0:mList.size();}@Overridepublic Object getItem(int position) {return mList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {convertView= View.inflate(mContext,R.layout.layout_listeitem,null);ViewHolder viewHolder = ViewHolder.getViewHolder(convertView);viewHolder.textView.setText(mList.get(position));viewHolder.checkBox.setChecked(checks.get(position));viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {checks.set(position,isChecked);notifyDataSetChanged();}});return convertView;}static class ViewHolder{private TextView textView;private CheckBox checkBox;public ViewHolder(View convertView){textView=convertView.findViewById(R.id.mTe_item);checkBox=convertView.findViewById(R.id.mCb_item);}public static ViewHolder getViewHolder(View convertView){ViewHolder viewHolder= (ViewHolder) convertView.getTag();if (viewHolder==null){viewHolder=new ViewHolder(convertView);convertView.setTag(viewHolder);}return viewHolder;}}
关于listview的全选、反选、取消、删除等操作相关推荐
- android 批量查找view,Android Recyclerview实现多选,单选,全选,反选,批量删除的功能
效果图如下: recyclerview 实现多选,单选,全选,反选,批量删除的步骤 1.在recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件 2.这里选中的控件没有用 ...
- android 全选功能,Android Recyclerview实现多选,单选,全选,反选,批量删除的功能
效果图如下: Recyclerview 实现多选,单选,全选,反选,批量删除的步骤 1.在Recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件 2.这里选中的控件没有用 ...
- android 获取通讯录全选反选_Android Recyclerview实现多选,单选,全选,反选,批量删除的功能...
效果图如下: Recyclerview 实现多选,单选,全选,反选,批量删除的步骤 1.在Recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件 2.这里选中的控件没有用 ...
- 安卓checkbox全选/反选/取消选择
activity_main.xml文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...
- javascript-行间样式,提取行间事件,while/for,全选/反选/取消,选项卡,innerHTML
行为.样式.结构分离(JS/CSS/HTML) 1.不要加行间样式: 2.不要加行间事件 一.行间样式 <!DOCTYPE doctype html> <html lang=&quo ...
- angularJS 全选反选批量删除
<th> <label for="flag"> <span ng-hide="master">全选</span> ...
- jQuery之标签操作和返回顶部、登录验证、全选反选、克隆示例
一.样式操作 1.JQ中的样式类 somenode.addClass();// 添加指定的CSS类名. somenode.removeClass();// 移除指定的CSS类名. somenode.h ...
- jQuery全选反选实例
1. $('#tb:checkbox').each(function(){ 每次都会执行 全选-取消操作,注意$('#tb :checkbox').prop('checked',true); tb后面 ...
- jQuery如何动态删除TR,input按钮删除本行记录,checkbox全选反选
checkbox 全选反选 1: var i = 1; 2: function CheckAllTeacher() { 3: if (i % 2 == 1) { 4: i++; 5: $(" ...
- DataGridView添加一行数据、全选、取消全选、清空数据、删除选中行
.net 2005下的Windows Form Application,一个DataGridView控件和4个Button,界面设置如下: 代码如下,有注解,相信大家都看得明白: using Syst ...
最新文章
- # 管道已结束_CIPP内衬紫外线固化法用于污水管道非开挖修复
- ITK:基于零交叉的边缘检测器
- angular4设置全局变量_angularjs 设置全局变量的7种方法
- 小米笔记本写代码真香,包邮送一台!
- outermost shell_outermost是什么意思_outermost的翻译_音标_读音_用法_例句_爱词霸在线词典...
- Wix 3.0正式发布
- 机器人学--运动学基础概念
- 智能烟感与物联网卡可以了解一波
- html网页怎么分页打印,web如何实现页面分页打印
- python爬取淘宝数据
- ERROR 1449 (HY000)
- 加息靴子落地铁矿石继续反弹,甲醇认购大涨,苹果10-01大跳水2022.5.5
- HTML如何引入md5算法,MD5算法实现
- android 美团下拉菜单,Android仿美团分类下拉菜单实例代码
- maven工程私服仓库配置(阿里云仓库)
- 几次安全实习面试简单记录
- MOVEIT PYTHON应用:编程实现速度和加速度设置
- C++课程设计:学生管理系统设计
- lisp提取长方形坐标_如何利用lisp程序一次性提取CAD中点的坐标(不要点击每个点,太多了麻烦)...
- 起重机械 安全监控管理系统总结
热门文章
- Ubuntu18.04 显卡驱动安装(GTX1060)正确步骤
- 于的繁体字有几种写法_于字书法繁体字怎么写
- 拼多多搜索热度怎么做|重庆乾胤
- OpenKG开源系列 | 中文高中地理知识图谱CKGG(南京大学)
- 阿里云负载均衡SLB简介
- 在线log计算机,log换算(log计算器在线)
- RT_thread 使用4G模块Air720H对STM32进行OTA远程无线升级
- 【007】Excel宏编程相关封装模块(筛选、复制、黏贴)_001_#VBA
- Flutter IOS 提交AppStore 审核失败
- 微软.Net离线语音识别