ExpandableListView
ExpandableListView

1.界面
- Item_Group_layout 就一个TextView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/expandable_listView_item_group_tv"
android:text="123"
android:textSize="20dp"
android:gravity="center"
android:layout_margin="3dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
- Item 布局, 一个ImageView 和一个TextView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/expandable_listView_item_group_iv"
android:background="@drawable/img2"
android:layout_margin="10dp"
android:layout_width="40dp"
android:layout_height="40dp"/>
<TextView
android:id="@+id/expandable_listView_item_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Group 1 Item 1"
android:textSize="24dp"/>
</LinearLayout>
2. 初始化数据,设置Adapter
private ArrayList<String> groupData;//存储Group 信息
ArrayList<ArrayList<Item>> allItems; //以Group 为单位,存储Items
ArrayList<Item> items; //每个组
//初始化组信息
groupData=new ArrayList<>();
groupData.add("Group1");
groupData.add("Group2");
groupData.add("Group3");
allItems=new ArrayList<>();
//Group1
items =new ArrayList<>();
items.add(new Item("I am the group 1 Item1",R.drawable.img1));
items.add(new Item("I am the group 1 Item2",R.drawable.img1));
items.add(new Item("I am the group 1 Item3",R.drawable.img1));
allItems.add(items); //将每组数据添加到总集合当中
//Group2
items=new ArrayList<>();
items.add(new Item("I am the group 2 Item1",R.drawable.img2));
items.add(new Item("I am the group 2 Item2",R.drawable.img2));
items.add(new Item("I am the group 2 Item3",R.drawable.img2));
allItems.add(items);
//Group3
items=new ArrayList<>();
items.add(new Item("I am the group 3 Item1",R.drawable.img3));
items.add(new Item("I am the group 3 Item2",R.drawable.img3));
items.add(new Item("I am the group 3 Item3",R.drawable.img3));
allItems.add(items);
listView=(ExpandableListView)findViewById(R.id.expandableList_lv);
//为ListView设置adapter
MyBaseExpandableAdapter adapter=new MyBaseExpandableAdapter(this,groupData,allItems);
listView.setAdapter(adapter);
//为列表设置点击事件
listView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
Toast.makeText(ExpandableListViewActivity.this, "你点击了:" +
allItems.get(groupPosition).get(childPosition).getText(),Toast.LENGTH_SHORT).show();
return true;
}
});
3、MyBaseExpandableAdapter:
BaseExpandableListAdapter 与 BaseAdapter不同是 getGroupView和 getChildView
需要重写 isChildSelectable,要不然不会触发 子Item的点击事件。
class MyBaseExpandableAdapter extends BaseExpandableListAdapter{
private ArrayList<String> groupData;
private ArrayList<ArrayList<Item>> itemData;
private Context mContext;
public MyBaseExpandableAdapter(Context context, ArrayList<String> groupData,ArrayList<ArrayList<Item>> itemData) {
this.mContext=context;
this.groupData=groupData;
this.itemData=itemData;
}
@Override
public int getGroupCount() {
return groupData.size();
}
@Override
public int getChildrenCount(int i) {
return itemData.get(i).size();
}
@Override
public Object getGroup(int i) {
return groupData.get(i);
}
@Override
public Object getChild(int i, int i1) {
return itemData.get(i).get(i1);
}
@Override
public long getGroupId(int i) {
return i;
}
@Override
public long getChildId(int i, int i1) {
return i1;
}
@Override
public boolean hasStableIds() {
return false;
}
//获取显示分组的视图
@Override
public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
ViewHolderGroup viewHolderGroup;
if(view==null){
view=View.inflate(mContext,R.layout.expandableview_group_layout,null);
viewHolderGroup=new ViewHolderGroup();
viewHolderGroup.tv_group_name=(TextView)view.findViewById(R.id.expandable_listView_item_group_tv);
view.setTag(viewHolderGroup);
}else{
viewHolderGroup=(ViewHolderGroup)view.getTag();
}
viewHolderGroup.tv_group_name.setText(groupData.get(i));
return view;
}
//获取Item视图
@Override
public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
ViewHolderItem viewHolderItem;
if(view==null){
view=View.inflate(mContext,R.layout.expandablelistview_item_layout,null);
viewHolderItem=new ViewHolderItem();
viewHolderItem.tv_name=(TextView)view.findViewById(R.id.expandable_listView_item_tv);
viewHolderItem.img_icon=(ImageView)view.findViewById(R.id.expandable_listView_item_group_iv);
view.setTag(viewHolderItem);
}else {
viewHolderItem=(ViewHolderItem)view.getTag();
}
viewHolderItem.tv_name.setText(itemData.get(i).get(i1).getText());
viewHolderItem.img_icon.setImageResource(itemData.get(i).get(i1).getImageId());
return view;
}
// 设置子列表是否可以选中
@Override
public boolean isChildSelectable(int i, int i1) {
return true;
}
private class ViewHolderGroup{
private TextView tv_group_name;
}
private class ViewHolderItem{
private ImageView img_icon;
private TextView tv_name;
}
Java Been:
class Item{
private String text;
private int imageId;
public Item(String text, int imageId) {
this.text = text;
this.imageId = imageId;
}
public int getImageId() {
return imageId;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
ExpandableListView的更多相关文章
- Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)
之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...
- Android中使用ExpandableListView实现好友分组
一个视图显示垂直滚动两级列表中的条目.这不同于列表视图,允许两个层次,类似于QQ的好友分组.要实现这个效果的整体思路为: 1.要给ExpandableListView 设置适配器,那么必须先设置数据源 ...
- 安卓开发树形控件之ExpandableListView(一)
这个例子非常简单,简单到一个初学者都能随便开发出来,今天的目的仅仅只是为了将效果实现出来,如果想深入这里有几篇非常不错的博客: Android 之ExpandableListView几个特殊的属性 h ...
- android 伸缩控件ExpandableListView 展开失败的可能原因。
(原创)转载请声明出处http://www.cnblogs.com/linguanh/ 问题原型: ExpandableListView 展开失效. --------------------直接看结论 ...
- ExpandableListView实现展开更多和收起更多
[需求]: 如上面图示 当点开某个一级菜单的时候,其他菜单收起: 子级菜单默认最多5个: 多于5个的显示"展开更多" 点击"展开更多",展开该级所有子级菜单,同 ...
- Android UI控件----ExpandableListView的基本用法
ExpandableListView介绍 ExpandableListView的引入 ExpandableListView可以显示一个视图垂直滚动显示两级列表中的条目,这不同于列表视图(ListVie ...
- 【原创】Android ExpandableListView使用
ExpandableView的使用可以绑定到SimpleExpandableListAdapter,主要是看这个Adapter怎么用. 这个类默认的构造函数有9个参数, 很好地解释了什么叫做又臭又长. ...
- android原生ExpandableListView
android原生可扩展ExpandableListView就是可以伸缩的listView,一条标题下面有多条内容. 这个list的adapter对的数据要求与普通ListView的数据要求也有一些差 ...
- 可滑动的ExpandableListView
可以向左滑动的扩展列表 向左滑动源码是参照GitHub上的里的 ListView的思路写出来的,按照他的思路,由于本人水平有限,只写了关键代码,能够完美运行,adapter改变之后能自动收回. 滑出状 ...
- Android中ExpandableListView的使用
ExpandableListView是Android中可以实现下拉list的一个控件,具体的实现方法如下: 首先:在layout的xml文件中定义一个ExpandableListView < L ...
随机推荐
- [hashcat]基于字典和暴力破解尝试找到rar3-hp的压缩包密码
1.使用rar2john找到md5 2.基于字典 hashcat -a 0 -m 12500 /root/Desktop/md5.txt /usr/share/wordlists/weakpass.t ...
- Apache Beam实战指南 | 手把手教你玩转大数据存储HdfsIO
https://mp.weixin.qq.com/s?__biz=MzU1NDA4NjU2MA==&mid=2247494843&idx=2&sn=0dd20caec76e25 ...
- 解决Navicat远程连接MySQL出现 10060 unknow error
前言:今天想远程连接一下自己服务器上的MySQL,用的用的软件是Navicat,服务器上的MySQL版本为5.7 第一次连接的时候就出意外了 大概意思是 无法连接MySQL服务,解决步骤如下 第一:首 ...
- Window下Eclipse+Tomcat远程调试
需求: 项目在开发环境跑得好好的,但是当发布到服务器上时,却出现了一些意外的问题.服务器上不可能给你装IDE调试工具啊,又没有很好的日志帮助下,这时候就用到了JVM的Java Platfo ...
- 测试框架httpclent 2.配置优化方法
优化就是为了使代码看起来更简便,如果代码里面的每一个请求都写一次url,那么整体代码看起来很乱,而且一旦某个服务器的端口号或者域名有变动,那么所有的url都需要改变,成本太大.为了让代码看起来更简便, ...
- 安利一个刚考过的信息安全认证Security+
在目前的信息安全大潮之下,人才是信息安全发展的关键.而目前国内的信息安全人才是非常匮乏的,拥有国际信息安全认证的人才,在未来职业发展.升职加薪的道路上必将优于普通的信息安全从业者. 果哥今天推荐201 ...
- Vue(项目踩坑)_解决vue中axios请求跨域的问题
一.前言 今天在做项目的时候发现axios不能请求跨域接口 二.主要内容 1.之前直接用get方式请求聚合数据里的接口报错如下 2.当前请求的代码 3.解决方法 (1)在项目目录中依次找到:confi ...
- 第十五节:Expression表达式目录树(与委托的区别、自行拼接、总结几类实例间的拷贝)
一. 基本介绍 回忆: 最早接触到表达式目录树(Expression)可能要追溯到几年前使用EF早期的时候,发现where方法里的参数是Expression<Func<T,bool> ...
- tex 字体斜体设置
\upshape 切换成直立的字体\itshape 切换成意大利斜体\slshape 切换成成为 slanted 的斜体\scshape 切换成小体大写 http://www.tug.dk/FontC ...
- Linux中执行C++程序
参考:https://blog.csdn.net/qq_31125955/article/details/79343498 https://blog.csdn.net/weixin_35477207/ ...