文章目录

  • 零、学习目标
  • 一、可展开列表视图概述
  • 二、可展开列表视图继承关系图
  • 三、教学案例 - 选择四大名著人物
    • (一)运行效果
    • (二)涉及知识点
    • (三)实现步骤
      • 1、创建安卓应用【SelectCharacter】
      • 2、将图片素材拷贝到drawable目录
      • 3、主布局资源文件activity_main.xml
      • 4、创建组列表项模板文件group_list_item.xml
      • 5、创建子列表项模板文件child_list_item.xml
      • 6、创建可扩展列表适配器BookAdapter
      • 7、主界面类MainActivity
      • 8、启动应用,查看效果

零、学习目标

  1. 能说出可展开列表视图常用属性
  2. 能利用可展开列表视图开发安卓应用

一、可展开列表视图概述

在日常开发,有可能会遇到需要一些可展开列表,jQuery可很方便地做出来。但是安卓里该怎么做呢?安卓提供了ExpandableListView类,可以生成可展开列表,它是是ListView的子类,在ListView基础上进行了拓展,把应用中的列表分为几组,每组又包含多个列表项。

二、可展开列表视图继承关系图

三、教学案例 - 选择四大名著人物

(一)运行效果

(二)涉及知识点

  1. 线性布局(LinearLayout)
  2. 标签(TextView)
  3. 可展开列表视图(ExpandableListView)
  4. 基可展开列表适配器(BaseExpandableListAdapter)

(三)实现步骤

1、创建安卓应用【SelectCharacter】


2、将图片素材拷贝到drawable目录

3、主布局资源文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/background" tools:context="net.hw.select_character.MainActivity"><ExpandableListViewandroid:id="@+id/elvBook"android:layout_width="match_parent"android:layout_height="wrap_content"android:childDivider="#555555"android:childIndicator="@drawable/child" />
</LinearLayout>

4、创建组列表项模板文件group_list_item.xml

<?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"android:background="#00b7ec"android:orientation="vertical"><TextViewandroid:id="@+id/tvTitle"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="40dp"android:textColor="#ffffff"android:textSize="25sp" />
</LinearLayout>

5、创建子列表项模板文件child_list_item.xml

<?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"android:orientation="vertical"><TextViewandroid:id="@+id/tvCharacter"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="60dp"android:layout_marginTop="5dp"android:layout_marginBottom="5dp"android:textColor="#0000ff"android:textSize="22sp" />
</LinearLayout>

6、创建可扩展列表适配器BookAdapter

package net.hw.select_character;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;/*** 功能:图书适配器* 作者:华卫* 日期:2020年11月13日*/
public class BookAdapter extends BaseExpandableListAdapter {private Context context;private String[] groups;private String[][] children;public BookAdapter(Context context, String[] groups, String[][] children) {this.context = context;this.groups = groups;this.children = children;}@Overridepublic int getGroupCount() {return groups.length;}@Overridepublic int getChildrenCount(int groupPosition) {return children[groupPosition].length;}@Overridepublic Object getGroup(int groupPosition) {return groups[groupPosition];}@Overridepublic Object getChild(int groupPosition, int childPosition) {return children[groupPosition][childPosition];}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Overridepublic boolean hasStableIds() {return true;}/*** 获取组列表视图** @param groupPosition* @param isExpanded* @param convertView* @param viewGroup* @return*/@Overridepublic View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup viewGroup) {GroupViewHolder holder = null;if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.group_list_item, null);holder = new GroupViewHolder();holder.tvTitle = convertView.findViewById(R.id.tvTitle);convertView.setTag(holder);} else {holder = (GroupViewHolder) convertView.getTag();}holder.tvTitle.setText(groups[groupPosition]);return convertView;}/*** 获取子列表视图** @param groupPosition* @param childPosition* @param isExpanded* @param convertView* @param viewGroup* @return*/@Overridepublic View getChildView(int groupPosition, int childPosition, boolean isExpanded, View convertView, ViewGroup viewGroup) {ChildViewHolder holder = null;if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.child_list_item, null);holder = new ChildViewHolder();holder.tvCharacter = convertView.findViewById(R.id.tvCharacter);convertView.setTag(holder);} else {holder = (ChildViewHolder) convertView.getTag();}holder.tvCharacter.setText(children[groupPosition][childPosition]);return convertView;}@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {return true;}/*** 子视图容器*/private class ChildViewHolder {TextView tvCharacter;}/*** 组视图容器*/private class GroupViewHolder {TextView tvTitle;}
}

7、主界面类MainActivity

package net.hw.select_character;import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private String[] groups = {"西游记", "水浒传", "三国演义", "红楼梦"};private String[][] children = {{"唐三藏", "孙悟空", "猪八戒", "沙和尚", "如来", "观音菩萨"},{"宋江", "林冲", "李逵", "鲁智深", "杨志", "武松", "卢俊义"},{"曹操", "刘备", "孙权", "诸葛亮", "周瑜", "鲁肃", "陆逊", "赵云"},{"贾宝玉", "林黛玉", "薛宝钗", "王熙凤", "史湘云", "秦可卿", "贾探春"}};private ExpandableListView elvBook;private BookAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 利用布局资源文件设置用户界面setContentView(R.layout.activity_main);// 通过资源标识获得控件实例elvBook = findViewById(R.id.elvBook);// 创建适配器adapter = new BookAdapter(this, groups, children);// 给列表控件设置适配器elvBook.setAdapter(adapter);// 给列表控件注册组列表展开监听器(非当前组收拢)elvBook.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {@Overridepublic void onGroupExpand(int groupPosition) {for (int i = 0; i < groups.length; i++) {if (i != groupPosition) {elvBook.collapseGroup(i);}}}});// 给列表控件注册组列表单击事件监听器elvBook.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {@Overridepublic boolean onGroupClick(ExpandableListView expandableListView, View view, int groupPosition, long l) {Toast.makeText(MainActivity.this, "你单击了第[" + (groupPosition + 1) + "]组:" + groups[groupPosition], Toast.LENGTH_SHORT).show();// 事件可往后传播return false;}});// 给列表控件注册子列表单击事件监听器elvBook.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {@Overridepublic boolean onChildClick(ExpandableListView expandableListView, View view, int groupPosition, int childPosition, long childId) {Toast.makeText(MainActivity.this, "你单击了第[" + (groupPosition + 1) + "]组第[" + (childPosition + 1) + "]项:" + children[groupPosition][childPosition], Toast.LENGTH_SHORT).show();// 禁止事件往后传播return true;}});}
}

8、启动应用,查看效果

安卓学习笔记22:常用控件 - 可展开列表视图相关推荐

  1. 【MFC】学习笔记:常用控件之组合框(Combo Box)

    01.目录 目录 01.目录 02.控件介绍 03.控件的消息通知函数 04.创建组合框控件及成员函数介绍 4.1 组合框的创建 4.2 CComboBox类的主要成员函数 05.应用实例 06.总结 ...

  2. Qt学习笔记之常用控件QlistWidget

    一.QListWidget Class The QListWidget class provides an item-based list widget. More... Header: #inclu ...

  3. Qt学习笔记之常用控件QTreeWidget

    一.QTreeWidget Class The QTreeWidget class provides a tree view that uses a predefined tree model. Mo ...

  4. 安卓学习笔记18:常用控件 - 按钮、图像视图和图像按钮

    文章目录 零.学习目标 一.按钮控件 1.继承关系图 2.常用属性 二.图像视图 1.继承关系图 2.常用属性 三.图像按钮 1.继承关系图 2.常用属性 四.教学案例 - 通过按钮缩放图片 (一)运 ...

  5. 安卓基础学习 Day 6|常用控件---列表视图+古诗查看

    目录 列表视图4要素 四种是适配器 古诗查看 古诗列表 1.主布局资源文件 2.诗歌列表项模板 3.字符串资源文件 4.主界面代码 5.启动应用.查看效果 古诗内容模板 1.内容模板的主布局资源文件 ...

  6. vs2010 学习Silverlight学习笔记(7):控件样式与模板

    概要: 终于知道Silverlight--App.xaml是干什么用的了,不仅可以用来封装样式(类似css),还可以制定控件模版...好强大的功能啊. 封装: 继续学习<一步一步学Silverl ...

  7. JavaFX 学习笔记——窗口与控件

    前言 如今比较流行的桌面gui框架有WPF.WinForm.Qt.javafx等.其中WPF和WinForm目前还只能在运行Winsows上.Qt(widget)是一个很强大的跨平台C++框架(不只是 ...

  8. vb.net listview 删除选定行_VBA学习笔记59-1: listview控件

    学习资源:<Excel VBA从入门到进阶>第59集 by兰色幻想 本节学习Listview控件,它可以用多种视图方式显示项目的控件.由于其外形美观而且非常实用,所以使用频率很高. Lis ...

  9. ASP.NET 学习笔记_01 广告控件的使用

    广告控件的使用: 广告文件是一个XML文件,广告文件中所有的标签属性被分析后放到adProperties字典中,用以属性编辑. ads.xml 1 <?xml version="1.0 ...

最新文章

  1. IEC104协议规约解析
  2. java课程设计进程管理_GitHub - Shadow-Java/OS: 操作系统课程设计,关键词:进程同步与互斥、进程死锁、LRU页面替换算法、时间片轮转算法、时钟等...
  3. 【HNOI2013】消毒
  4. ASP.NET Core 运行原理解剖[5]:Authentication
  5. Jenkins持续集成环境, 如何自定义 maven repositories
  6. 四阶行列式直接展开_【Just For Fun】n 階行列式計算 宏 生成器,四阶行列式的最优展开...
  7. mysql拼接数组_Mysql合并结果接横向拼接字段的实现步骤
  8. list集合去除重复对象
  9. CentOS7.2 在线安装MySQL8.0
  10. c语言读取tdx日线文件,***EXCEL读取通达信股票日线数据***改为读取通达信股票5分钟数据...
  11. python 生孩子朋友圈_新生儿出生朋友圈说说,生孩子报喜唯美句子
  12. 浏览器+js实现超强的搜索访问功能
  13. c语言 关键字volatile和register
  14. 壹沓科技签约七匹狼,助力「中国男装领导者」数字化转型
  15. 用endnote9往word中插入参考文献
  16. MySQL - 用户管理
  17. 传奇微端服务器客户端需要哪些文件,想开服需要了解和准备什么?
  18. 贪婪算法-Greedy algorithm
  19. Python分析微信好友性别比例
  20. 【性能测试】性能测试的概念和术语介绍 性能测试分类(了解每种测试的目的)

热门文章

  1. 云图说|初识数据仓库服务:云时代的数据分析助手
  2. 【华为云技术分享】大数据实践解析(下):Spark的读写流程分析
  3. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(上)
  4. 即将到来的“分布式云”(DPaaS):分布式计算+ DB +存储即服务
  5. 【华为云技术分享】《跟唐老师学习云网络》 — IP和掩码
  6. 【华为云实战开发】11.如何快速开展嵌入式开发项目?
  7. TikZ学习笔记(一) 基本图形
  8. Ubuntu系统opencv4.4安装常见问题 找不到 feature2d/test/test_detectors_regression.impl.hpp 文件
  9. C++实现俄罗斯方块
  10. python在线搭建教程_理解python web开发,轻松搭建web app!