Android ListView带checkBox 实现多选模式
来源:互联网 发布:vb中name是什么意思 编辑:程序博客网 时间:2024/06/14 11:22
前言,listView 是我们开发时候,经常使用的控件,所以listView我们都要很熟悉,我是新手,在这里记录下,自己显示listView 带checkbox实现多选模式, 这里就用项目的文件来说明下
首先是布局文件
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="102dp"> <ImageView android:id="@+id/id_iv_allbg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="15dp" android:background="@mipmap/all_item_bg"/> <TextView android:id="@+id/id_tv_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:layout_toRightOf="@+id/id_iv_allbg" android:text="绿地之窗云峰座" android:textColor="@color/color333" android:textSize="15dp"/> <TextView android:id="@+id/id_tv_jjia" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/id_tv_add" android:layout_marginTop="7dp" android:layout_toRightOf="@+id/id_iv_allbg" android:text="均价 : " android:textColor="@color/color999" android:textSize="12dp"/> <TextView android:id="@+id/id_tv_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/id_tv_jjia" android:layout_toRightOf="@+id/id_tv_jjia" android:text=" 7000/㎡" android:textColor="@color/color999" android:textSize="12dp"/> <TextView android:id="@+id/id_tv_detail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/id_tv_jjia" android:layout_marginTop="7dp" android:layout_toRightOf="@+id/id_iv_allbg" android:text="金水区花园路龙门路交互处西300米" android:textColor="@color/color999" android:textSize="12dp"/> <RelativeLayout android:id="@+id/id_rl_yjin" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/id_tv_detail" android:layout_marginTop="10dp" android:layout_toRightOf="@+id/id_iv_allbg" android:background="@drawable/all_yijinbg"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="2dp" android:text="佣" android:textColor="@color/white" android:textSize="11dp"/> <TextView android:id="@+id/id_tv_yjin" android:layout_width="62dp" android:layout_height="15dp" android:gravity="end" android:paddingRight="5dp" android:text="最高3%" android:textColor="@color/colorffa64d" android:textSize="11dp"/> </RelativeLayout> <TextView android:id="@+id/id_tv_ls" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/id_tv_detail" android:layout_marginLeft="7dp" android:layout_marginTop="10dp" android:layout_toRightOf="@+id/id_rl_yjin" android:background="@drawable/ls" android:gravity="center" android:minWidth="33dp" android:text="期房" android:textColor="@color/color99d5f1" android:textSize="11dp"/> <TextView android:id="@+id/id_tv_zs" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/id_tv_ls" android:layout_marginLeft="5dp" android:layout_toRightOf="@+id/id_tv_ls" android:background="@drawable/zs" android:gravity="center" android:minWidth="33dp" android:text="在售" android:textColor="@color/colord79bc7" android:textSize="11dp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/id_tv_ls" android:layout_marginLeft="5dp" android:layout_toRightOf="@+id/id_tv_zs" android:background="@drawable/qf" android:gravity="center" android:minWidth="33dp" android:text="在售" android:textColor="@color/color30bd81" android:textSize="11dp"/> <CheckBox android:id="@+id/id_cb_dele" android:focusable="false" android:clickable="false" style="@style/CustomCheckboxTheme" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/id_tv_jjia" android:layout_alignParentRight="true" android:layout_marginRight="13dp" android:baselineAlignBottom="true"/> <View style="@style/set_line" android:layout_below="@+id/id_iv_allbg"/> <!-- android:focusable="false" 不让CheckBox 点击 把checkBox 的点击事件 交给item去处理了 android:clickable="false" --></RelativeLayout>
这里值得注意的就是 ,一定要把checkbox的 android:focusable=”false” android:clickable 这两个属性改成false ,我本来想让checkbox 也可以点击 ,item也可以点击,但是 实现起来太麻烦了 ,而且也没有太多的 必要,把两个属性直接改成false 点击你点击checkbox其实也是在点击item,所以效果还是可以的
2, 接下来就是我们所熟悉的适配器 adpater了
package com.dhfjj.program.adapters;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.TextView;import com.dhfjj.program.R;import java.util.HashMap;/** * Created by Administrator on 2016/2/19. */public class YxLpAdapter extends BaseAdapter { private Context mContext; private Button mbtSure; private HashMap<Integer, Boolean> status = new HashMap<>(); public YxLpAdapter(Context mContext,Button mbtSure) { this.mContext = mContext; this.mbtSure = mbtSure; } public HashMap<Integer, Boolean> getStatus() { return status; } @Override public int getCount() { return 10; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(mContext).inflate(R.layout.item_lvyxlp, parent, false); viewHolder.tvAdd = (TextView) convertView.findViewById(R.id.id_tv_add); viewHolder.tvPrice = (TextView) convertView.findViewById(R.id.id_tv_phone); viewHolder.tv_Addressdetail = (TextView) convertView.findViewById(R.id.id_tv_detail); viewHolder.tv_yjin = (TextView) convertView.findViewById(R.id.id_tv_yjin); viewHolder.cb_detel = (CheckBox) convertView.findViewById(R.id.id_cb_dele); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } final ViewHolder finalViewHolder = viewHolder; viewHolder.cb_detel.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { status.put(position, isChecked); finalViewHolder.cb_detel.setTag(status); } else { status.remove(position); } } }); viewHolder.cb_detel.setChecked(status.get(position) == null ? false : true); return convertView; } private class ViewHolder { TextView tvAdd; // 楼盘 名称 TextView tvPrice; // 均价 TextView tv_Addressdetail; // 楼盘的地址详细 TextView tv_yjin;// 佣金 CheckBox cb_detel; // 删除 }}
这里就是 item复用的问题,自己维护一个map去保存checkBox选中的状态.
viewHolder.cb_detel.setChecked(status.get(position) == null ? false : true);
这句话就是是不是显示checkBox的选中的状态
3,下面就是listView item的点击事件
Itemstatus = mLpAdapter.getStatus(); // 保存 那几个被选中 了 final HashMap<Integer, Boolean> mapBoolean = new HashMap<>(); mlvYxLP.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { RelativeLayout rlView = (RelativeLayout) view; CheckBox cb_detel = (CheckBox) rlView.getChildAt(9); cb_detel.setChecked(!cb_detel.isChecked()); Boolean aBoolean = Itemstatus.get(position); // 如果是 选中的状态 if (aBoolean != null && aBoolean) { if (mapList.size() <= 2) { mapBoolean.put(position, aBoolean); mapList.add(mapBoolean); mbtdetele.setVisibility(View.VISIBLE); // TODO 在这里把选中楼盘的名字 添加到集合里 , 用于在 推荐客户里面显示 } else { ToastUtils.showToast(AddLoupActivity.this, "最多添加3个"); // 数量超过3个的时候, 不让它处于选中的状态 cb_detel.setChecked(false); } } else { // 为空的话,就把选择的 remove 掉 mapList.remove(mapBoolean); if (mapList.size() == 0) { mbtdetele.setVisibility(View.GONE); } } } });
这里item的代码的注释都很清楚
好了到这里就可以实现,item点击的时候就可以
0 0
- Android ListView带checkBox 实现多选模式
- Android ListView带CheckBox实现单选
- Android---自定义带CheckBox的ListView实现
- Android 带checkbox的listView 实现多选,全选,反选
- Android 带checkbox的listView 实现多选,全选,反选
- Android 带checkbox的listView 实现多选,全选,反选
- Android 带checkbox的listView 实现多选,全选,反选
- Android 带checkbox的listView 实现多选,全选,反选
- Android 带checkbox的listView 实现多选,全选,反选
- Android 带checkbox的listView 实现多选,全选,反选
- Android 带checkbox的listView 实现多选,全选,反选,删除
- Android 带checkbox的listView 实现多选,全选,反选
- Android 带checkbox的listView 实现多选,全选,反选
- Android 带checkbox的listView 实现多选,全选,反选
- Android 带checkbox的listView 实现多选,全选,反选
- 带checkbox的listView 实现多选,全选,反选
- Android开发:实现带图片和checkbox的listview
- Android开发:实现带图片和checkbox的listview
- DSP 2812: 使用C++封装定时器及应用举例
- PAT-A1075. PAT Judge (25)(排序)
- ExtJS superclass.constructor.call(this, config)
- ifdef使用
- Apache shiro 笔记整理之整合spring
- Android ListView带checkBox 实现多选模式
- NYOJ 题目171 聪明的kk
- Ubuntu14.04装好系统后,安装无线网卡
- Exynos4412 所用外存 —— eMMC
- iOS ToolBar item 间距详解
- hdu5521 Meeting最短路
- PAT-A1080. Graduate Admission (30)(排序)
- hive优化
- Leetcode13. Roman to Integer