ExpandableListView结合CheckBox实现单选的完整示例
发布日期:2021-06-30 11:11:19 浏览次数:2 分类:技术文章

本文共 6477 字,大约阅读时间需要 21 分钟。

MainActivity如下:

import java.util.HashMap;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.ContextMenu;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.ContextMenu.ContextMenuInfo;import android.widget.AbsListView;import android.widget.BaseExpandableListAdapter;import android.widget.CheckBox;import android.widget.ExpandableListAdapter;import android.widget.ExpandableListView;import android.widget.TextView;import android.widget.ExpandableListView.OnChildClickListener;import android.widget.ExpandableListView.OnGroupClickListener;import android.widget.ExpandableListView.OnGroupCollapseListener;import android.widget.ExpandableListView.OnGroupExpandListener;public class ExpandableListViewTestActivity extends Activity {	private ExpandableListView elistview = null; // 定义树型组件	private ExpandableListAdapter adapter = null; // 定义适配器对象	CheckBox childBox;	TextView childTextView;	private HashMap
statusHashMap; View childItem = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); // 默认布局管理器 this.elistview = (ExpandableListView) super.findViewById(R.id.elistview); // 取得组件 this.adapter = new MyExpandableListAdapter(this); // 实例化适配器 this.elistview.setAdapter(this.adapter); // 设置适配器 this.elistview.setOnChildClickListener(new OnChildClickListenerImpl()); // 设置子项单击事件 this.elistview.setOnGroupClickListener(new OnGroupClickListenerImpl());// 设置组项单击事件 this.elistview.setOnGroupCollapseListener(new OnGroupCollapseListenerImpl());// 关闭分组事件 this.elistview.setOnGroupExpandListener(new OnGroupExpandListenerImpl()); // 展开分组事件 } private class OnChildClickListenerImpl implements OnChildClickListener {// 监听子项点击事件 @Override public boolean onChildClick(ExpandableListView parent, View v,int groupPosition, int childPosition, long id) { int gourpsSum = adapter.getGroupCount();//组的数量 for(int i = 0; i < gourpsSum; i++) { int childSum = adapter.getChildrenCount(i);//组中子项的数量 for(int k = 0; k < childSum;k++) { boolean isLast = false; if (k == (childSum - 1)){ isLast = true; } CheckBox cBox = (CheckBox) adapter.getChildView(i, k, isLast, null, null).findViewById(R.id.checkBox); cBox.toggle();//切换CheckBox状态!!!!!!!!!! boolean itemIsCheck=cBox.isChecked(); TextView tView=(TextView) adapter.getChildView(i, k, isLast, null, null).findViewById(R.id.textView); String gameName=tView.getText().toString(); if (i == groupPosition && k == childPosition) { statusHashMap.put(gameName, itemIsCheck); } else { statusHashMap.put(gameName, false); } ((BaseExpandableListAdapter) adapter).notifyDataSetChanged();//通知数据发生了变化 } } return true; } } private class OnGroupClickListenerImpl implements OnGroupClickListener {// 组被点击事件 @Override public boolean onGroupClick(ExpandableListView parent, View v,int groupPosition, long id) { return false; } } private class OnGroupCollapseListenerImpl implements OnGroupCollapseListener {// 组收缩事件 @Override public void onGroupCollapse(int groupPosition) { } } private class OnGroupExpandListenerImpl implements OnGroupExpandListener {// 打开组事件 @Override public void onGroupExpand(int groupPosition) { } } @Override public void onCreateContextMenu(ContextMenu menu, View view,ContextMenuInfo menuInfo) {// 处理长按事件 } // 自定义适配器!!!! private class MyExpandableListAdapter extends BaseExpandableListAdapter { private Context context = null; public String[] groups = { "扑克", "麻将" }; // 组名称 public String[][] children = { { "斗地主", "炸金花", "推火车" },{ "四川麻将", "北京麻将", "湖南麻将" } }; // 定义子选项 public MyExpandableListAdapter(Context context) { this.context = context; statusHashMap = new HashMap
(); for (int i = 0; i < children.length; i++) {// 初始时,让所有的子选项均未被选中 for (int a = 0; a < children[i].length; a++) { statusHashMap.put(children[i][a], false); } } } @Override public Object getChild(int groupPosition, int childPosition) { // 取得指定的子项 return this.children[groupPosition][childPosition]; } @Override public long getChildId(int groupPosition, int childPosition) { // 取得子项ID return childPosition; } public TextView buildTextView() { // 自定义方法,建立文本.用于显示组 AbsListView.LayoutParams param = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 35); // 指定布局参数 TextView textView = new TextView(this.context); // 创建TextView textView.setLayoutParams(param); // 设置布局参数 textView.setTextSize(14.0f); // 设置文字大小 textView.setGravity(Gravity.LEFT); // 左对齐 textView.setPadding(40, 8, 3, 3); // 间距 return textView; // 返回组件 } //点击事件发生后:先执行事件监听,然后调用此getChildView() @Override public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {// 返回子项组件 if (convertView == null) {// 第一次的时候convertView是空,所以要生成convertView LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.item, null); } childTextView = (TextView) convertView.findViewById(R.id.textView); childTextView.setText(getChild(groupPosition, childPosition).toString()); childBox = (CheckBox) convertView.findViewById(R.id.checkBox); Boolean nowStatus = statusHashMap.get(children[groupPosition][childPosition]);//当前状态 childBox.setChecked(nowStatus); return convertView; } @Override public int getChildrenCount(int groupPosition) { // 取得子项个数 return this.children[groupPosition].length; } @Override public Object getGroup(int groupPosition) { // 取得组对象 return this.groups[groupPosition]; } @Override public int getGroupCount() { // 取得组个数 return this.groups.length; } @Override public long getGroupId(int groupPosition) { // 取得组ID return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {// 取得组显示组件 TextView textView = buildTextView(); // 建立组件 textView.setText(this.getGroup(groupPosition).toString()); // 设置文字 return textView; } @Override public boolean hasStableIds() { return true; } @Override public void notifyDataSetChanged() {//通知数据发生变化 super.notifyDataSetChanged(); } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }}

main.xml如下:

item.xml如下:

 

转载地址:https://it9527.blog.csdn.net/article/details/10532859 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Python基础核心经典教程(001)——Python简介
下一篇:Version 28 (intended for Android Pie and below) is the last version of the legacy support library

发表评论

最新留言

不错!
[***.144.177.141]2024年04月04日 20时39分49秒