list多选 android,Android ExpandableListView单选以及多选实现代码
一、概述
ExpandableListView是常用的一个控件,今天自己做了个小练习,主要需求是单选以及多选的实现,看似比较简单,但是还是比较复杂,把代码贴给大家,有这种需求的可以参考一下。
二、效果截图
三、实现过程
activity_main.xml
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
android:id="@+id/exlistview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:listSelector="@android:color/transparent" >
group_item.xml
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants"
android:padding="10dp" >
android:id="@+id/id_group_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:padding="10dp"
android:text="hao"
android:textColor="@android:color/black"
android:textIsSelectable="true"
android:textSize="15sp" >
android:id="@+id/id_group_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true" />
listview_item.xml
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants"
android:padding="10dp" >
android:id="@+id/id_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:padding="10dp"
android:layout_marginLeft="30dp"
android:textColor="#55acac"
android:textIsSelectable="true"
android:textSize="15sp" >
android:id="@+id/id_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:layout_alignParentRight="true"
android:layout_centerVertical="true" />
MainAcitivity.java
public class MainActivity extends Activity {
private List> parentList = new ArrayList>();
private List>> childData = new ArrayList>>();
private ExpandableListView exListView;
private Context context = this;
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
setListener();
}
/**
* 记录正在选中的子listview的item条目 用hashset是为了去除重复值
*/
private HashSet hashSet;
private void setListener()
{
exListView.setOnGroupExpandListener(new OnGroupExpandListener()
{
@Override
public void onGroupExpand(int groupPosition)
{
//存取已选定的集合
hashSet = new HashSet();
}
});
// ExpandableListView的Group的点击事件
exListView.setOnGroupClickListener(new OnGroupClickListener()
{
@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id)
{
// 可以写点击后实现的功能
return false;
}
});
// ExpandableListView的child的点击事件
exListView.setOnChildClickListener(new OnChildClickListener()
{
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id)
{
Map map = childData.get(groupPosition).get(
childPosition);
String childChecked = map.get("isChecked");
if ("No".equals(childChecked))
{
map.put("isChecked", "Yes");
hashSet.add("选定" + childPosition);
} else
{
map.put("isChecked", "No");
if (hashSet.contains("选定" + childPosition))
{
hashSet.remove("选定" + childPosition);
}
}
System.out.println("选定的长度==1" + hashSet.size());
System.out.println("选定的长度==2"
+ childData.get(groupPosition).size());
if (hashSet.size() == childData.get(groupPosition).size())
{
parentList.get(groupPosition).put("isGroupCheckd", "Yes");
} else
{
parentList.get(groupPosition).put("isGroupCheckd", "No");
}
adapter.notifyDataSetChanged();
return false;
}
});
}
// 初始化数据
private void initData()
{
for (int i = 0; i < 10; i++)
{
Map groupMap = new HashMap();
groupMap.put("groupText", "item" + i);
groupMap.put("isGroupCheckd", "No");
parentList.add(groupMap);
}
for (int i = 0; i < 10; i++)
{
List> list = new ArrayList>();
for (int j = 0; j < 4; j++)
{
Map map = new HashMap();
map.put("childItem", "childItem" + j);
map.put("isChecked", "No");
list.add(map);
}
childData.add(list);
}
adapter = new MyAdapter();
exListView.setAdapter(adapter);
exListView.expandGroup(0);
hashSet = new HashSet();
}
private void initView()
{
exListView = (ExpandableListView) findViewById(R.id.exlistview);
}
/**
* 适配adapter
*/
private class MyAdapter extends BaseExpandableListAdapter {
@Override
public Object getChild(int groupPosition, int childPosition)
{
// TODO Auto-generated method stub
return childData.get(groupPosition).get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition)
{
// TODO Auto-generated method stub
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent)
{
ViewHolder holder = null;
if (convertView == null)
{
holder = new ViewHolder();
convertView = View.inflate(context, R.layout.listview_item,
null);
holder.childText = (TextView) convertView
.findViewById(R.id.id_text);
holder.childBox = (CheckBox) convertView
.findViewById(R.id.id_checkbox);
convertView.setTag(holder);
} else
{
holder = (ViewHolder) convertView.getTag();
}
holder.childText.setText(childData.get(groupPosition)
.get(childPosition).get("childItem"));
String isChecked = childData.get(groupPosition).get(childPosition)
.get("isChecked");
if ("No".equals(isChecked))
{
holder.childBox.setChecked(false);
} else
{
holder.childBox.setChecked(true);
}
return convertView;
}
@Override
public int getChildrenCount(int groupPosition)
{
// TODO Auto-generated method stub
return childData.get(groupPosition).size();
}
@Override
public Object getGroup(int groupPosition)
{
return parentList.get(groupPosition);
}
@Override
public int getGroupCount()
{
// TODO Auto-generated method stub
return parentList.size();
}
@Override
public long getGroupId(int groupPosition)
{
// TODO Auto-generated method stub
return groupPosition;
}
@Override
public View getGroupView(final int groupPosition,
final boolean isExpanded, View convertView, ViewGroup parent)
{
ViewHolder holder = null;
if (convertView == null)
{
holder = new ViewHolder();
convertView = View.inflate(context, R.layout.group_item, null);
holder.groupText = (TextView) convertView
.findViewById(R.id.id_group_text);
holder.groupBox = (CheckBox) convertView
.findViewById(R.id.id_group_checkbox);
convertView.setTag(holder);
} else
{
holder = (ViewHolder) convertView.getTag();
}
holder.groupText.setText(parentList.get(groupPosition).get(
"groupText"));
final String isGroupCheckd = parentList.get(groupPosition).get(
"isGroupCheckd");
if ("No".equals(isGroupCheckd))
{
holder.groupBox.setChecked(false);
} else
{
holder.groupBox.setChecked(true);
}
/*
* groupListView的点击事件
*/
holder.groupBox.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
CheckBox groupBox = (CheckBox) v
.findViewById(R.id.id_group_checkbox);
if (!isExpanded)
{
//展开某个group view
exListView.expandGroup(groupPosition);
} else
{
//关闭某个group view
exListView.collapseGroup(groupPosition);
}
if ("No".equals(isGroupCheckd))
{
exListView.expandGroup(groupPosition);
groupBox.setChecked(true);
parentList.get(groupPosition).put("isGroupCheckd",
"Yes");
List> list = childData
.get(groupPosition);
for (Map map : list)
{
map.put("isChecked", "Yes");
}
} else
{
groupBox.setChecked(false);
parentList.get(groupPosition)
.put("isGroupCheckd", "No");
List> list = childData
.get(groupPosition);
for (Map map : list)
{
map.put("isChecked", "No");
}
}
notifyDataSetChanged();
}
});
return convertView;
}
@Override
public boolean hasStableIds()
{
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition)
{
return true;
}
}
private class ViewHolder {
TextView groupText, childText;
CheckBox groupBox, childBox;
}
}
四、总结及注意点
1、设置CheckBox的点击事件,而非别的
2、exListView.collapseGroup(groupPosition); 关闭正展开的子ListView.
这是demo地址,欢迎下载:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
list多选 android,Android ExpandableListView单选以及多选实现代码相关推荐
- android的listview多选功能,Android ListView实现单选及多选等功能示例
本文实例讲述了Android ListView实现单选及多选等功能的方法.分享给大家供大家参考,具体如下: 在项目中也遇到过给ListView的item添加选择功能.比如一个网购APP,有个历史浏览页 ...
- Android CheckedTextView 实现单选与多选
以下demo 地址 单选与双选实现的效果如下 CheckedTextView 继承的是 TextView 实现 Checkable 具有TextView 的属性 一般使用结合ListView xml ...
- 如何在Android Studio使用单选和复选框
教学案例:设置个人基本信息 1.新建安卓项目 基于- Empty Activity模板创建安卓应用 - SetBasicInformation 2.准备一张图像素材 将背景图片拷贝到drawable目 ...
- 【Android】5.3 单选和复选
分类:C#.Android.VS2015: 创建日期:2016-02-07 一.简介 1.CheckBox 复选 [Checked]属性:是否选中. 2.RadioButton 单选 [Checked ...
- android 单选、多选弹出菜单
菜单单选窗口: import android.app.Activity; import android.app.AlertDialog; import android.content.DialogIn ...
- android单选对话框代码,Android实现单选与多选对话框的代码
android开发中实现单选与多选对话框的代码非常简单,具体代码如下所示: public void myClick(View view) { // 单选对话框 //singleCheckDialog( ...
- android 流失布局,GitHub - hongyangAndroid/FlowLayout: [不再维护]Android流式布局,支持单选、多选等,适合用于产品标签等。...
FlowLayout Android流式布局,支持单选.多选等,适合用于产品标签等. ##特色 以setAdapter形式注入数据 直接设置selector为background即可完成标签选则的切换 ...
- android开发 问卷调查案例_「Android问卷调查类型页面及逻辑实现」RadioButton、CheckBox、EditView、单选、多选、输入、...
Android问卷调查类型页面及逻辑实现,RadioButton,CheckBox,EditView,RadioButton+EditView单选.多选.输入.单选加输入四种状态四种类型 问题简述:A ...
- Android 图片选择对话框,通过本地相册或照相机获得图片,可单选或多选,单选可设置是否裁剪
AndroidPickPhotoDialog 项目地址: wanliyang1990/AndroidPickPhotoDialog 简介:Android 图片选择对话框,通过本地相册或照相机获得图片, ...
最新文章
- android 编译 oserror,Android-4.4.2 编译出错 OSError: [Errno 2] No such file or directory
- oracle怎么打代码,使用DOS打Oracle代码技巧
- OpenJDK将对Android开发产生怎样的影响?
- KDD_cup99 pytorch
- AngularJS $http 异步后台无法获取请求参数
- P1582 倒水(二进制)
- meta name id class 标签的区别
- LeetCode 202. 快乐数(快慢指针)
- 1.1.0-简介-P9-分布式ID生成器解决方案
- ssis 包配置组织程序_如何停止失控的SSIS程序包
- 依赖注入(DI)入门
- android怎么oauth2公版认证,Android中腾讯微博OAuth认证(一)---获取RequestToken
- 内Sane外Win:敏捷需要一流的项目经理
- 勤做眼保健操,减轻眼睛疲劳
- 微信H5公众号获取openid爬坑记
- [面试] 各大IT公司校园招聘程序猿笔试、面试题集锦
- 电磁兼容工程(Electromagnetic compatibility engineering Herry Ott )读书笔记--章12 数字电路的辐射
- HTML、CSS、JS、jQuery
- 《一升的眼泪》日语台词
- 生而为人,请善待每一个人