Android之View提升:四 使用ExpandableListView 折叠显示
Android之view提升:四 使用ExpandableListView 折叠显示
- 组项布局
- 子项布局
- 自定义Adapter 继承
BaseExpandableListAdapter
package cn.study.project.study_view_improve;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;/*** @author zyy* @date 2021年06月01日 上午10:41*/
public class ExpandableAdapter extends BaseExpandableListAdapter {private final String[] groups;private final String[][] childs;private final Context mContext;public ExpandableAdapter(String[] groups, String[][] childs, Context mContext) {this.groups = groups;this.childs = childs;this.mContext = mContext;}@Overridepublic int getGroupCount() {if(groups!=null)return groups.length;return 0;}@Overridepublic int getChildrenCount(int groupPosition) {return childs[groupPosition].length;}@Overridepublic Object getGroup(int groupPosition) {return groups[groupPosition];}@Overridepublic Object getChild(int groupPosition, int childPosition) {return childs[groupPosition][childPosition];}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Override//分组和子选项是否持有稳定的ID, 就是说底层数据的改变会不会影响到它们public boolean hasStableIds() {return true;}@Overridepublic View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {GroupViewHolder holder;if(convertView == null){convertView = LayoutInflater.from(mContext).inflate(R.layout.parent_layout,parent,false);holder = new GroupViewHolder();holder.parent_tv = convertView.findViewById(R.id.parent_tv_id);holder.parent_image = convertView.findViewById(R.id.parent_image_id);convertView.setTag(holder);}else{holder = (GroupViewHolder) convertView.getTag();}holder.parent_tv.setText(groups[groupPosition]);if(isExpanded){holder.parent_image.setImageResource(R.drawable.ic_baseline_keyboard_arrow_down_24);}else{holder.parent_image.setImageResource(R.drawable.ic_baseline_keyboard_arrow_right_24);}return convertView;}@Overridepublic View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {ChildViewHolder holder;if(convertView == null){convertView = LayoutInflater.from(mContext).inflate(R.layout.child_layout,parent,false);holder = new ChildViewHolder();holder.child_tv = convertView.findViewById(R.id.chidren_item);convertView.setTag(holder);}else{holder = (ChildViewHolder) convertView.getTag();}holder.child_tv.setText(childs[groupPosition][childPosition]);return convertView;}@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {return true;}static class GroupViewHolder{TextView parent_tv;ImageView parent_image;}static class ChildViewHolder{TextView child_tv;}
}
- RelativeLayout 的使用
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"android:background="@color/black"android:layout_height="50dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:id="@+id/parent_tv_id"android:text="test"android:textColor="@color/white"android:gravity="center_vertical"android:paddingLeft="10dp"android:textSize = "18sp"/><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/parent_image_id"android:src="@drawable/ic_baseline_keyboard_arrow_right_24"android:layout_centerInParent="true"android:layout_alignParentEnd="true"/></RelativeLayout>
- MainActivity.java 中实现监听等事件
package cn.study.project.study_view_improve;import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;public class MainActivity extends AppCompatActivity {private ExpandableListView expand_list_id;//Model:定义的数据private String[] groups = {"开发部", "人力资源部", "销售部"};//注意,字符数组不要写成{{"A1,A2,A3,A4"}, {"B1,B2,B3,B4,B5"}, {"C1,C2,C3,C4"}}private String[][] childs = {{"赵珊珊", "钱丹丹", "孙可可", "李冬冬"}, {"周大福", "吴端口", "郑非", "王疯狂"}, {"冯程程", "陈类", "楚哦", "魏王"}};@SuppressLint("ClickableViewAccessibility")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);expand_list_id = findViewById(R.id.expanded_list_view);ExpandableAdapter adapter=new ExpandableAdapter(groups,childs,MainActivity.this);expand_list_id.setAdapter(adapter);//默认展开第一个分组expand_list_id.expandGroup(0);//关闭数组某个数组,可以通过该属性来实现全部展开和只展开一个列表功能//expand_list_id.collapseGroup(0);
// expand_list_id.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {// @Override
// public boolean onGroupClick(ExpandableListView expandableListView, View view, int groupPosition, long l) {// showToastShort(groups[groupPosition]);
// return false;
// }
// });
// //子视图的点击事件
// expand_list_id.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {// @Override
// public boolean onChildClick(ExpandableListView expandableListView, View view, int groupPosition, int childPosition, long l) {// showToastShort(childs[groupPosition][childPosition]);
// return true;
// }
// });
// //用于当组项折叠时的通知。
// expand_list_id.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {// @Override
// public void onGroupCollapse(int groupPosition) {// showToastShort("折叠了数据___"+groups[groupPosition]);
// }
// });
// //
// //用于当组项展开时的通知。
// expand_list_id.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {// @Override
// public void onGroupExpand(int groupPosition) {// showToastShort("展开了数据___"+groups[groupPosition]);
// }
// });
//}}
- 更多, 请参考博客
Android之View提升:四 使用ExpandableListView 折叠显示相关推荐
- android 绘制心率曲线图,Android 特效View第四弹之折线图 心率图
Android 特效View第四弹之折线图 心率图 android:layout_width="match_parent" android:layout_height=" ...
- 精通Android自定义View(十四)绘制水平向右加载的进度条
1引言 1 精通Android自定义View(一)View的绘制流程简述 2 精通Android自定义View(二)View绘制三部曲 3 精通Android自定义View(三)View绘制三部曲综合 ...
- Android 自定义View(四)实现股票自选列表滑动效果
一.前言 Android 开发过程中自定义 View 真的是无处不在,随随便便一个 UI 效果,都会用到自定义 View.前面三篇文章已经讲过自定义 View 的一些案例效果,相关类和 API,还有事 ...
- android自定义View之(四)------一键清除动画
1.前言: 自己也是参考别人的一些自定义view例子,学习了一些基本的自定义view的方法.今天,我参考了一些资料,再结合自已的一些理解,做了一个一键清除的动画.当年,我实现这个是用了几张图片,采用F ...
- Android自定义View的四种方式
目录 一 前言 二 分类 1.组合控件 2.继承系统控件 3.继承View 4.继承ViewGroup 三 自定义View 1.构造函数 2.onMeasure 3.onLayout 4.onDraw ...
- Android自定义View研究(四) -- 在XML中定义View
如果在一直使用SetContentView(new HellwView(this)感觉总是少了一点东西,少了什么了,失去了Android中使用XML定义组件的方便性性,这种感觉让人很不爽,呵呵,在这节 ...
- Android自定义View实现图片放大,平移和显示大图片
原文地址 图片如果不显示:点击这里 前言 首先分析一下需求:将一个图片显示在屏幕上,并能够对其放大或者平移. 用 canvas 画 bitmap 主要有这么几个方法. void drawBitmap( ...
- android自定义起止时间的时间刻度尺,Android 自定义View篇(六)实现时钟表盘效果...
前言 Android 自定义 View 是高级进阶不可或缺的内容,日常工作中,经常会遇到产品.UI 设计出花里胡哨的界面.当系统自带的控件不能满足开发需求时,就只能自己动手撸一个效果. 本文就带自定义 ...
- android+清除循环动画,android自定义View之(4)-一键清除动画
android自定义View之(四)------一键清除动画 1.前言: 自己也是参考别人的一些自定义view例子,学习了一些基本的自定义view的方法.今天,我参考了一些资料,再结合自已的一些理解, ...
最新文章
- Sqli-labs less 50
- UVA662- Fast Food
- MBR与GPT分区格式(实例-创建大于2TB的分区)
- Windows 环境下载安装Docker
- 使用 Boost.Multiprecision 来实现高精度高斯-拉盖尔正交积分
- 【MapReduce】
- Linux中,文件创建的时间是怎么保存的?
- mac vscode设置中文_VSCode编写latex
- 为什么日本人晚上那么晚去居酒屋吃炸鸡喝啤酒,但街上却鲜有胖子?
- Spring事务管理的四种方式(以银行转账为例)
- Java后台开发一:环境搭建
- MySQL实战第二十二讲-MySQL有哪些“饮鸩止渴”提高性能的方法?
- 关于百度地图定位出现5e-324的解决办法
- GVM踩坑记录之 Failed to find port_list ‘33d0cd82-57c6-11e1-8ed1-406186ea4fc5‘
- 【C++】辗转相除求最大公约数算法及原理
- D-MNSV6-X8|D-MNSV7-X16磁导航传感器RS232/RS485(MODBUS-RTU)通讯协议说明
- Android换肤技术
- MySQL实现字符串连接
- 删除数组中重复的元素 C语言
- 活动邀请 | 虹科邀您参加“开启TSN之路”技术研讨会