一般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的全选、反选、取消、删除等操作相关推荐

  1. android 批量查找view,Android Recyclerview实现多选,单选,全选,反选,批量删除的功能

    效果图如下: recyclerview 实现多选,单选,全选,反选,批量删除的步骤 1.在recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件 2.这里选中的控件没有用 ...

  2. android 全选功能,Android Recyclerview实现多选,单选,全选,反选,批量删除的功能

    效果图如下: Recyclerview 实现多选,单选,全选,反选,批量删除的步骤 1.在Recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件 2.这里选中的控件没有用 ...

  3. android 获取通讯录全选反选_Android Recyclerview实现多选,单选,全选,反选,批量删除的功能...

    效果图如下: Recyclerview 实现多选,单选,全选,反选,批量删除的步骤 1.在Recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件 2.这里选中的控件没有用 ...

  4. 安卓checkbox全选/反选/取消选择

    activity_main.xml文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...

  5. javascript-行间样式,提取行间事件,while/for,全选/反选/取消,选项卡,innerHTML

    行为.样式.结构分离(JS/CSS/HTML) 1.不要加行间样式: 2.不要加行间事件 一.行间样式 <!DOCTYPE doctype html> <html lang=&quo ...

  6. angularJS 全选反选批量删除

    <th> <label for="flag"> <span ng-hide="master">全选</span> ...

  7. jQuery之标签操作和返回顶部、登录验证、全选反选、克隆示例

    一.样式操作 1.JQ中的样式类 somenode.addClass();// 添加指定的CSS类名. somenode.removeClass();// 移除指定的CSS类名. somenode.h ...

  8. jQuery全选反选实例

    1. $('#tb:checkbox').each(function(){ 每次都会执行 全选-取消操作,注意$('#tb :checkbox').prop('checked',true); tb后面 ...

  9. jQuery如何动态删除TR,input按钮删除本行记录,checkbox全选反选

    checkbox 全选反选 1: var i = 1; 2: function CheckAllTeacher() { 3: if (i % 2 == 1) { 4: i++; 5: $(" ...

  10. DataGridView添加一行数据、全选、取消全选、清空数据、删除选中行

    .net 2005下的Windows Form Application,一个DataGridView控件和4个Button,界面设置如下: 代码如下,有注解,相信大家都看得明白: using Syst ...

最新文章

  1. # 管道已结束_CIPP内衬紫外线固化法用于污水管道非开挖修复
  2. ITK:基于零交叉的边缘检测器
  3. angular4设置全局变量_angularjs 设置全局变量的7种方法
  4. 小米笔记本写代码真香,包邮送一台!
  5. outermost shell_outermost是什么意思_outermost的翻译_音标_读音_用法_例句_爱词霸在线词典...
  6. Wix 3.0正式发布
  7. 机器人学--运动学基础概念
  8. 智能烟感与物联网卡可以了解一波
  9. html网页怎么分页打印,web如何实现页面分页打印
  10. python爬取淘宝数据
  11. ERROR 1449 (HY000)
  12. 加息靴子落地铁矿石继续反弹,甲醇认购大涨,苹果10-01大跳水2022.5.5
  13. HTML如何引入md5算法,MD5算法实现
  14. android 美团下拉菜单,Android仿美团分类下拉菜单实例代码
  15. maven工程私服仓库配置(阿里云仓库)
  16. 几次安全实习面试简单记录
  17. MOVEIT PYTHON应用:编程实现速度和加速度设置
  18. C++课程设计:学生管理系统设计
  19. lisp提取长方形坐标_如何利用lisp程序一次性提取CAD中点的坐标(不要点击每个点,太多了麻烦)...
  20. 起重机械 安全监控管理系统总结

热门文章

  1. Ubuntu18.04 显卡驱动安装(GTX1060)正确步骤
  2. 于的繁体字有几种写法_于字书法繁体字怎么写
  3. 拼多多搜索热度怎么做|重庆乾胤
  4. OpenKG开源系列 | 中文高中地理知识图谱CKGG(南京大学)
  5. 阿里云负载均衡SLB简介
  6. 在线log计算机,log换算(log计算器在线)
  7. RT_thread 使用4G模块Air720H对STM32进行OTA远程无线升级
  8. 【007】Excel宏编程相关封装模块(筛选、复制、黏贴)_001_#VBA
  9. Flutter IOS 提交AppStore 审核失败
  10. 微软.Net离线语音识别