Android_ExpandableListView
实现效果: 类似于QQ联系人列表


相关属性:
- android:childDivider:指定各组内子类表项之间的分隔条,图片不会完全显示, 分离子列表项的是一条直线
- android:childIndicator:显示在子列表旁边的Drawable对象,可以是一个图像
- android:childIndicatorEnd:子列表项指示符的结束约束位置
- android:childIndicatorLeft:子列表项指示符的左边约束位置
- android:childIndicatorRight:子列表项指示符的右边约束位置
- android:childIndicatorStart:子列表项指示符的开始约束位置
- android:groupIndicator:显示在组列表旁边的Drawable对象,可以是一个图像
- android:indicatorEnd:组列表项指示器的结束约束位置
- android:indicatorLeft:组列表项指示器的左边约束位置
- android:indicatorRight:组列表项指示器的右边约束位置
- android:indicatorStart:组列表项指示器的开始约束位置
核心是重写BaseExpandableListAdpter
layout_item.xml
<?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/item_iv"
android:layout_width="90dp"
android:layout_height="90dp"
android:src="@drawable/sor"
android:focusable="false"
android:layout_margin="20dp"></ImageView>
<TextView
android:id="@+id/item_tv"
android:layout_width="match_parent"
android:layout_height="90dp"
android:text="item1"
android:textSize="25dp"
android:gravity="center_vertical"
android:layout_margin="20dp"
android:focusable="false"></TextView>
</LinearLayout>
item_group.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_group"
android:layout_width="match_parent"
android:layout_height="90dp"
android:text="数学"
android:paddingLeft="50dp"
android:gravity="center_vertical"
android:background="@drawable/btn_nocornor"
android:textSize="25dp"
></TextView>
</LinearLayout>
mainActivity.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ExpandableView.ExpandableViewActivity">
<ExpandableListView
android:id="@+id/expad_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:childDivider="#212"></ExpandableListView>
</RelativeLayout>
MyBaseExpandableListAdapter
package com.example.myapplication5.ExpandableView; import android.content.ClipData;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView; import com.example.myapplication5.R; import java.security.acl.Group;
import java.util.ArrayList; public class MyBaseExpandableListAdapter extends BaseExpandableListAdapter {
private ArrayList<String> gData;
private ArrayList<ArrayList<String[]>> iData;
private Context mContext;
public MyBaseExpandableListAdapter(ArrayList<String> gData, ArrayList<ArrayList<String[]>> iData,Context mContext){
this.gData=gData;
this.iData=iData;
this.mContext=mContext;
}
@Override
public int getGroupCount() {
return gData.size();
} @Override
public int getChildrenCount(int groupPosition) {
return iData.get(groupPosition).size();
} @Override
public Object getGroup(int groupPosition) {
return gData.get(groupPosition);
} @Override
public Object getChild(int groupPosition, int childPosition) {
return iData.get(groupPosition).get(childPosition);
} @Override
public long getGroupId(int groupPosition) {
return groupPosition;
} @Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
} @Override
public boolean hasStableIds() {
return false;
} @Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
ViewHolderGroup viewHolderGroup;
if (convertView==null){
convertView= LayoutInflater.from(mContext).inflate(R.layout.layout_item_expanda_group,parent,false);
viewHolderGroup=new ViewHolderGroup();
viewHolderGroup.tv_g_name=convertView.findViewById(R.id.tv_group);
convertView.setTag(viewHolderGroup);
}else {
viewHolderGroup= (ViewHolderGroup) convertView.getTag();
}
viewHolderGroup.tv_g_name.setText(gData.get(groupPosition));
return convertView;
} @Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ViewHolderItem viewHolderItem;
if (convertView==null){
convertView=LayoutInflater.from(mContext).inflate(R.layout.layout_item_expanda_item,parent,false);
viewHolderItem=new ViewHolderItem();
viewHolderItem.tv_it_name=convertView.findViewById(R.id.item_tv);
viewHolderItem.iv_it_head=convertView.findViewById(R.id.item_iv);
convertView.setTag(viewHolderItem);
}else {
viewHolderItem= (ViewHolderItem) convertView.getTag();
}
String[] strings=iData.get(groupPosition).get(childPosition);
viewHolderItem.tv_it_name.setText(strings[0]);
viewHolderItem.iv_it_head.setImageResource(Integer.parseInt(strings[1])); return convertView;
} @Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
private static class ViewHolderGroup{
private TextView tv_g_name;
}
private static class ViewHolderItem{
private TextView tv_it_name;
private ImageView iv_it_head;
}
}
MainActivity
package com.example.myapplication5.ExpandableView; import androidx.appcompat.app.AppCompatActivity; import android.content.ClipData;
import android.content.Context;
import android.os.Bundle;
import android.widget.ExpandableListView; import com.example.myapplication5.R; import java.security.acl.Group;
import java.util.ArrayList; public class ExpandableViewActivity extends AppCompatActivity {
private ArrayList<String> gData=null;
private ArrayList<ArrayList<String[]>> iData=null;
private ArrayList<String[]> ldata=null;
private Context mcontext;
private ExpandableListView expandableListView;
private MyBaseExpandableListAdapter myAdapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_expandable_view);
expandableListView=findViewById(R.id.expad_view);
gData=new ArrayList<String>();
iData=new ArrayList<ArrayList<String[]>>();
ldata=new ArrayList<String[]>();
gData.add("康师傅");
gData.add("今麦郎");
gData.add("上品");
ldata.add(new String[]{"红烧牛肉面",(""+R.drawable.sor)});
ldata.add(new String[]{"老坛酸菜牛肉面",(""+R.drawable.sor)});
iData.add(ldata);
ldata=new ArrayList<>();
ldata.add(new String[]{"西红柿鸡蛋打卤面",(""+R.drawable.sor)});
ldata.add(new String[]{"酸豆角牛肉面",(""+R.drawable.sor)});
iData.add(ldata);
ldata=new ArrayList<>();
ldata.add(new String[]{"香辣牛肉面",""+R.drawable.sor});
iData.add(ldata);
myAdapter=new MyBaseExpandableListAdapter(gData,iData,getApplicationContext());
expandableListView.setAdapter(myAdapter);
}
}
Android_ExpandableListView的更多相关文章
- ExpandableListView的用法
ExpandableListView组件是android中一个比较常用的组件,当点击一个父item的时候可以将它的子item显示出来,像手机QQ中的好友列表就是实现的类型效果.使用Expandable ...
随机推荐
- JMeter+Grafana+Influxdb搭建可视化性能测试监控平台(待继续完善。。。)
influxdb下载.安装.配置.启动 InfluxDB是一个当下比较流行的时序数据库,InfluxDB使用 Go 语言编写,无需外部依赖,安装配置非常方便,适合构建大型分布式系统的监控系统. 下载: ...
- step1:准备歌词之《前端开发是个啥》
以下是给大家介绍前端开发的填词,曲子是李圣杰的<最近>,大家喜欢可以试试唱. 点赞关注超过100的平台,我后续上来发本人原唱视频(目前正在练习中...),另外大家觉得哪些词写得不好的,欢迎 ...
- Docker Compose 模板文件 V2
模板文件是使用Compose的核心,默认模板文件名称为docker-compose.yml ,格式为YAML格式. 目录结构 [root@localhost ~]# tree /opt/compose ...
- Oracle 重启监听
对于DBA来说,启动和关闭oracle监听器是很基础的任务,但是Linux系统管理员或者程序员有时也需要在开发数据库中做一些基本的DBA操作,因此了解一些基本的管理操作对他们来说很重要. 本文将讨论用 ...
- Http2优点
1.信道复用 2.分帧传输 3.Server Push Http/1.1与Http/2对比网站: https://http2.akamai.com/demo https://http2.akamai. ...
- Windows环境下Nginx配置本地虚拟域名
进入conf文件夹,新建servers文件夹: 将内部的server配置段提取单独放在一个文件里,存到了conf/servers下,以方便配置多个虚拟主机. 并在nginx.conf里http配置段内 ...
- python环境开发
Python3 下载 Python3 最新源码,二进制文档,新闻资讯等可以在 Python 的官网查看到: Python 官网:https://www.python.org/ 你可以在以下链接中下载 ...
- Java 中常见排序算法
经典的排序算法总结 冒泡排序算法 算法描述: 比较相邻的元素:如果第一个比第二个大,就交换它们两个: 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数: 针 ...
- 【mysql】索引相关的个人总结
重点参考: MySQL索引原理及慢查询优化 (美团技术分享网站):原理.示例优化都写的很好. 索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!:原理写的很好. [从入门到入土]令人脱发 ...
- mysql必知必会--使用MySQL
连接 在具有可供使用的MySQL DBMS和客户机软件之后,有必要简要讨 论一下如何连接到数据库. MySQL与所有客户机 - 服务器DBMS一样,要求在能执行命令之前登 录到DBMS.登录名可以与网 ...