列表多选配合取消和确定以及全选使用
来源:互联网 发布:里仁洞淘宝广告摄影 编辑:程序博客网 时间:2024/04/28 14:57
效果
代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rl_spinner_up" android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/colorWhite"> <TextView android:id="@+id/tv_spinner_multi" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:gravity="center" android:text="" android:textAllCaps="false" android:textColor="@color/colorTv" /> <CheckBox android:id="@+id/cb_spinner_multi" android:layout_width="13dp" android:layout_height="9dp" android:layout_centerVertical="true" android:layout_marginLeft="8dp" android:layout_toRightOf="@id/tv_spinner_multi" android:background="@drawable/selector_item_type" android:button="@null" android:checked="true" android:clickable="false" android:focusable="false" android:gravity="center" /></RelativeLayout>
public class MyAdapter extends BaseAdapter { private Context mContext; private List<String> mList; //用来控制CheckBox的选中状况 private static HashMap<Integer, Boolean> isSelected; public MyAdapter(Context context, List<String> list, HashMap<Integer, Boolean> isSelected) { this.mList = list; this.mContext = context; this.isSelected = isSelected; initData(); } //初始化isSelected的数据 private void initData() { for (int i = 0; i < mList.size(); i++) { getIsSelected().put(i, false); } } private void initDataTrue() { for (int i = 0; i < mList.size(); i++) { getIsSelected().put(i, true); } } public void updata(HashMap<Integer, Boolean> isSelectedTrue) { for (int i = 0; i < isSelectedTrue.size(); i++) { this.isSelected.put(i, isSelectedTrue.get(i)); } notifyDataSetChanged(); } @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder; String bean = mList.get(position); LayoutInflater inflater = LayoutInflater.from(mContext); if (convertView == null) { convertView = inflater.inflate(R.layout.item_layout, parent, false); holder = new ViewHolder(); holder.tv_spinner_multi = convertView.findViewById(R.id.tv_spinner_multi); holder.cb_spinner_multi = convertView.findViewById(R.id.cb_spinner_multi); holder.rl_spinner_up = convertView.findViewById(R.id.rl_spinner_up); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.tv_spinner_multi.setText(bean); //监听checkBox并根据原来的状态来设置新的状态 holder.rl_spinner_up.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (isSelected.get(position)) { if (position == 0) { initData();//如果是0位置,就将所有的都设置成不选中 } else { isSelected.put(0, false);//有一个非0位置的不选中的时候,0位置的就不会被选中 isSelected.put(position, false); setIsSelected(isSelected); } } else { if (position == 0) { initDataTrue();//如果是0位置,就将所有的都设置成选中 } else { //非0位置的时候,判断其他的子项是否已经选中 int count = 0; for (int i = 0; i < getIsSelected().size(); i++) { if (i != 0 && i != position && getIsSelected().get(i)) { count++; } } if (count == mList.size() - 2) { isSelected.put(0, true); } isSelected.put(position, true); setIsSelected(isSelected); } } notifyDataSetChanged(); } }); //根据选中情况设置字体颜色 if (isSelected.get(position)) { holder.tv_spinner_multi.setTextColor(mContext.getResources().getColor(R.color.colorAccent)); } else { holder.tv_spinner_multi.setTextColor(mContext.getResources().getColor(R.color.colorTv)); } // 根据isSelected来设置checkbox的选中状况 holder.cb_spinner_multi.setChecked(getIsSelected().get(position)); return convertView; } public static HashMap<Integer, Boolean> getIsSelected() { return isSelected; } public static void setIsSelected(HashMap<Integer, Boolean> isSelected) { MyAdapter.isSelected = isSelected; } private static class ViewHolder { private TextView tv_spinner_multi; private CheckBox cb_spinner_multi; private RelativeLayout rl_spinner_up; }}
private String area[] = {"全部", "北京", "上海", "广州", "深圳", "郑州", "南京"};private HashMap<Integer, Boolean> isSelectedArea = new HashMap<Integer, Boolean>();private HashMap<Integer, Boolean> isSelectedAreaTrue = new HashMap<Integer, Boolean>();listview = (ListView) findViewById(R.id.listview);myAdapter = new MyAdapter(this, Arrays.asList(area), isSelectedArea);listview.setAdapter(myAdapter);initData();//初始化isSelectedTrue的数据private void initData() {for (int i = 0; i < area.length; i++) {isSelectedAreaTrue.put(i, false);}}public void onClick(View view) {switch (view.getId()) {case R.id.tv_show:if (listview.getVisibility() == View.VISIBLE) {listview.setVisibility(View.GONE);} else {listview.setVisibility(View.VISIBLE);}break;case R.id.btn_spinner_cancel_area:listview.setVisibility(View.GONE);myAdapter.updata(isSelectedAreaTrue);break;case R.id.btn_spinner_ok_area:List<String> selectedListArea = new ArrayList<>();listview.setVisibility(View.GONE);isSelectedArea = myAdapter.getIsSelected();for (int i = 0; i < isSelectedArea.size(); i++) {isSelectedAreaTrue.put(i, isSelectedArea.get(i));if (isSelectedArea.get(i).equals(true)) {selectedListArea.add(area[i]);}}break;}}
阅读全文
0 0
- 列表多选配合取消和确定以及全选使用
- 全选和取消全选
- C#WinForm开发系列之CheckBox控件全选和取消全选以及checkedListBox的基础使用介绍
- 《JavaScript学习笔记四》:getElementsByTagName的使用以及全选、反选和取消功能实现
- C#中使用listview的checkBoxs全选和取消全选
- checkbox全选和取消全选
- checkbox 全选和取消全选
- Jquery全选和取消全选
- jquery全选/取消全选(反选)/单选操作以及获取值常见用法和错误-jquery prop()函数使用教程
- Checkbox 全选和取消全选的代码
- 数据表格全选和取消全选功能
- jQuery实现点击全选和取消全选
- JQuery实现checkbox全选和取消全选
- jquery:实现全选和取消全选
- jQuery实现点击全选和取消全选
- checkbox全选,反选和取消全选
- 列表框的 全选 反选 取消
- 复选框全选和取消
- 微信公众帐号开发教程01-引言
- 选择排序
- Java基础总结--Java编程环境变量配置
- SearchView使用笔记
- IT技术培训红火催生“积云速度”
- 列表多选配合取消和确定以及全选使用
- js点击button按钮跳转到页面代码
- 优秀网页设计的七条基本准则
- centos7 rpm安装或者升级mysql5.7
- 学IT技术女生学什么专业好?
- spring boot:使用@ConfigurationProperties注解加载配置文件
- 100多个G JavaWeb项目技术视频 高级开发工程师及架构师必备资料视频内容 5年辛苦积累~
- 从request获取各种路径总结
- mysql5.7官方文档翻译之:Installing MySQL on Unix/Linux Using Generic Binaries