ExpandableListView

android ExpandableListView简单应用及listview模拟ExpandableListView 首先我们还是来看一些案例,还是拿搜狐新闻客户端,因为我天天上下班没事爱看这个东东,上班又没时间看新闻,上下班路途之余浏览下新闻打发时间嘛.                            看这个效果挺棒吧,其实实现起来也不难,我简单说明下. 首先我们用到的控件是:ExpandableListView 布局文件: <RelativeLayout xmlns:android="ht 阅读详情

Adapter:

package com.example.websocketchaifen.activity;

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.websocketchaifen.R;

import java.util.List;

/**
 * author : ZJS
 * e-mail : 15574564770@163.com
 * date   : 20-9-4上午11:25
 * desc   :
 * version : 1.0
 */
public class myAdapter extends BaseExpandableListAdapter {

    Context context;
    LayoutInflater mInflater;
    String[] mGroupStrings;
    List<List<Item>> mData;

    public myAdapter(Context context, List<List<Item>> mData) {
        this.context = context;
        this.mData = mData;
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mGroupStrings = new String[]{"第1个", "第2个", "第3个", "第4个"};

    }

    //获取子列表项对应的Item
    @Override
    public Item getChild(int groupPosition, int childPosition) {
        return mData.get(groupPosition).get(childPosition);
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    //获得子列表项的数目
    @Override
    public int getChildrenCount(int groupPosition) {
        return mData.get(groupPosition).size();
    }

    //获得父列表项
    @Override
    public Object getGroup(int groupPosition) {
        return mData.get(groupPosition);
    }

    //获得父列表项的数目
    @Override
    public int getGroupCount() {
        return mData.size();
    }

    //获得父列表项的Id
    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    //子列表项是否能否触发事件,返回true则为可以响应点击
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.group_item_layout, null);
        }
        GroupViewHolder holder = new GroupViewHolder();
        holder.mGroupName = (TextView) convertView.findViewById(R.id.group_name);
        holder.mGroupName.setText(mGroupStrings[groupPosition]);
        holder.mGroupCount = (TextView) convertView.findViewById(R.id.group_number);
        holder.mGroupCount.setText("[" + mData.get(groupPosition).size() + "]");

        return convertView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        if (convertView == null) {
            //如果第一次调用则convertView为null,需要获得对应的layout布局文件:子列表项的布局R.layout.child_item_layout
            convertView = mInflater.inflate(R.layout.child_item_layout, null);
        }
        //子列表项的布局文件的View类,具体看下面的类定义
        ChildViewHolder holder = new ChildViewHolder();
        holder.mIcon = (ImageView) convertView.findViewById(R.id.img);
        holder.mChildName = (TextView) convertView.findViewById(R.id.item_name);
        holder.mChildName.setText(getChild(groupPosition, childPosition).getName());
        holder.mDetail = (TextView) convertView.findViewById(R.id.item_detail);
        holder.mDetail.setText(getChild(groupPosition, childPosition).getDetail());
        return convertView;
    }

    private class GroupViewHolder {
        TextView mGroupName;
        TextView mGroupCount;
    }
    private class ChildViewHolder {
        ImageView mIcon;
        TextView mChildName;
        TextView mDetail;
    }
}

bean

package com.example.websocketchaifen.activity;

/**
 * author : ZJS
 * e-mail : 15574564770@163.com
 * date   : 20-9-4上午11:26
 * desc   :
 * version : 1.0
 */
public class Item {
    private int resId;            //图片(头像)的Id
    private String name;    //子列表项的名字(QQ昵称)
    private String detail;    //子列表项的详细信息(QQ签名)

    public int getResId() {
        return resId;
    }

    public void setResId(int resId) {
        this.resId = resId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDetail() {
        return detail;
    }

    public void setDetail(String detail) {
        this.detail = detail;
    }
}

main_layout

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".activity.ceshi">

    <ExpandableListView
        android:id="@+id/expandableListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1" />
</androidx.constraintlayout.widget.ConstraintLayout>

child_item_layout.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">

    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/icon_lx_n" />

    <TextView
        android:text="aaaa"
        android:id="@+id/item_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:text="aaaaaaaa"
        android:id="@+id/item_detail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

group_layout

<?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="horizontal">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:gravity="center_horizontal"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/group_name"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="AAAA" />

        <TextView
            android:id="@+id/group_number"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="AAAA" />
    </LinearLayout>

</LinearLayout>

main_activity

package com.example.websocketchaifen.activity;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ExpandableListView;

import com.example.websocketchaifen.R;

import java.util.ArrayList;
import java.util.List;

public class ceshi extends AppCompatActivity {

    private ExpandableListView listView;
    private List<List<Item>> data = new ArrayList<>();
    private List<Item> mdata = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ceshi);
        Item item = new Item();
        item.setName("A");
        item.setDetail("A");
        mdata.add(item);
        for (int i = 0; i < 4; i++) {
            data.add(mdata);
        }

        listView = (ExpandableListView) findViewById(R.id.expandableListView);
        myAdapter adapter = new myAdapter(this, data);
        listView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }
}

掌握Android中ExpandableListView的全面应用 本文还有配套的精品资源,点击获取 简介:在Android开发中, ExpandableListView 控件用于展示层次结构数据,如菜单或目录。本文通过一个名为 ExpandableListDemo 的示例项目,详细介绍了如何有效地使用 ExpandableListView ,包括其基础、数据模型创建、适配器实现、数据绑定、点击事件... 阅读详情

相关推荐

在Android开发中掌握ExpandableListView

本文还有配套的精品资源,点击获取 简介:ExpandableListView是Android中用于展示层次化数据的控件,通过两层结构(父条目和子条目)实现展开和折叠功能,提供丰富的用户交互体验。本教程详细介绍如何使用ExpandableListView,包括创建数据模型、自定义适配器、事件监听、控制展开和折叠、性能优化、样式自定义以及状态保存与恢复等步骤,帮助开发者通过实践...

weixin_36197669的博客 1122

Expandlistview的使用

首先expandlistview和listview的 大致用法是一模一样的 expandablelistview = (ExpandableListView) resutlview .findViewById(R.id.expandlistview); final SortExpandableAdapter sortExpandableAdapter = new SortExpandable

u011268642的专栏 5721

实现ExpandableListView的侧滑删除功能

ExpandableListView是Android开发中常用的组件,用于展示具有层级结构的数据。它比普通的ListView更进一步,能够显示两级以上的列表项,使得界面层次感更强,用户交互体验更佳。自定义子项布局是提升用户体验的重要手段。允许开发者定义子项的XML布局文件。这使得我们可以精确控制子项的外观和添加自定义视图元素。首先,创建一个名为的布局文件,用于定义组视图的外观。然后,创建另一个文件来定义子项的外观。这些文件应放在项目的res/layout目录下。

weixin_31659095的博客 822

进阶_ExpandListView新建_150330

本文提供两个ExpandListView; 1:自带控件,ExpandListView找到其id,然后实例化,加载数据直接通过 String[i][j]的方式加载 2:直接在.java文件中新建一个ExpandableListView 不多说,具体详细代码中有:本文介绍的是第二种 布局文件两个,第一个 group_item_layout.xml  组的布局 <LinearLay

ylineyline的专栏 570

FPGA 核脉冲梯形成型 Verilog 实现:从 MATLAB 到 50MHz 采样率部署

本文详细解析了FPGA实现核脉冲梯形成型的完整流程,从MATLAB仿真到50MHz采样率的Verilog硬件部署。重点探讨了梯形成型算法对负指数信号的优化处理,包括定点数量化、流水线架构设计及资源优化技巧,为核辐射探测与高能物理实验提供高效解决方案。

weixin_30920513的博客 392

Altera Cyclone4 EP4CE15F17C8核心板硬件设计避坑指南(附AD09工程文件)

本文深入解析Altera Cyclone4 EP4CE15F17C8核心板硬件设计中的关键问题与解决方案,涵盖电源架构优化、信号完整性处理、热设计及生产调试要点。特别提供经过验证的AD09工程文件,帮助开发者规避常见设计陷阱,提升FPGA项目的成功率与可靠性。

weixin_29159441的博客 298

方案选型:ExpandableListView 与 RecyclerTreeView,Android 树形列表该选谁?

做 Android 开发时,一旦遇到文件目录、部门组织、评论楼中楼这类层级数据,就难免纠结:**Android 树形列表**到底该用哪个控件?老牌选手 ExpandableListView 上手快、资料多;而基于 RecyclerView 实现的 RecyclerTreeView 则代表更现代、更灵活的玩法。本文不堆源码,只从性能、扩展性、动画、易用性四个维度做一次横向对比,帮你快速选对方案。

gitblog_00202的博客 725

TEC 高精度控温算法:实现精准升降温与恒温控制

本文深入解析了TEC高精度控温算法的核心原理与工程实践。针对TEC非线性、时变的特性,算法通过智能状态机实现精准升降温与恒温控制,并详细阐述了参数整定、硬件协同及调试优化的系统性方法,为半导体激光器、PCR仪等高精度温控应用提供了一套完整的解决方案。

weixin_29212867的博客 1013

Android ExpandableListView可展开列表

ExpandableListView使用介绍,实现ExpandableListView适配器的编写、数据的刷新、分割线的设置等。

sea_bo的博客 6659

Verilog流水线CPU设计(超详细)

快把这一篇给更了

Ace Cheney的博客 7万+

保姆级教程:Windows下用GDC-Client下载TCGA数据,从环境变量配置到成功下载

本文提供Windows平台下使用GDC-Client下载TCGA数据的完整教程,从环境变量配置到成功下载。详细介绍了GDC-Client工具的安装、系统环境变量设置、配置文件优化以及数据下载实战技巧,帮助生物信息学研究者高效获取TCGA数据库中的癌症基因组数据。

weixin_42520025的博客 404

Android ExpandableListView使用指南

Android ExpandableListView使用指南 项目介绍 Android的ExpandableListView是一个强大的UI组件,它允许开发者展示具有层级关系的数据。这个项目是基于harishsn/ExpandableListView,旨在提供一个简洁且易用的ExpandableListView实现示例。项目展示了如何构建一个具有可展开和折叠功能的列表,这在展示分类信息或组织数据时...

gitblog_00349的博客 1070

YOLOv13改进策略【Backbone/轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 672

ExpandableListView源码解析

ExpandableListView

AdrianAndroid的专栏 985

基于滤波反投影的图像重建算法matlab仿真

基于滤波反投影的图像重建算法是一种用于医学影像重建的计算机辅助技术。该算法可以从投影数据中重建出高质量的三维图像,被广泛应用于医学影像学、CT、PET等领域。本文将详细介绍基于滤波反投影的图像重建算法的原理、步骤和应用。一、原理介绍基于滤波反投影的图像重建算法基于X射线CT成像原理,它的主要思想是通过对投影数据进行处理,反推出被成像物体的三维形状。其核心原理是投影数据与目标物体之间的线性关系,即通过估计目标物体的吸收率来计算投影数据的变化,从而反推出目标物体的三维形状。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 386

YOLOv12涨点优化:自研检测头 | 独家创新(Partial_C_v12Detect)检测头结构创新,实现涨点

现有12Detect进行二次创新,提升检测精度,独家创新(Partial_C_12Detect)检测头结构创新,适合科研创新度十足,强烈推荐

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 633

Android 使用ExpandableListView时,需要注意哪些细节

若 ExpandableListView 处于 LinearLayout 中,可以使用 android:layout_weight 属性来分配剩余空间。如果 ExpandableListView 位于 RelativeLayout 中,需要使用相对定位属性来确定其位置。可以使用 android:scrollbars 属性来控制滚动条的显示方式,取值可以是 vertical、horizontal 或 none。

陈志宝‑天津|Android&Java 全栈开发工程师 1441

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android ExpandableListView嵌套ListView

ExpandableListView是一个垂直滚动显示两级列表项的视图,与ListView不同的是,它可以有两层:每一层都能够被独立的展开并显示其子项。这些子项来自于与该视图关联的BaseExpandableListAdapter。      有时候简单的ExpandableListView不能满足我们的需求,比如下面这样的需求:      这就需要在ExpandableListView里面

liuhanhan512的专栏 4019

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android开发-ExpandableListView控件

目录 1.ExpandableListView概述 1.1 定义 1.2 与ListView的区别 1.3 应用场景 2.常用属性 2.1 groupIndicator 2.2 childIndicator 2.3 childDivider 3.常用的方法 3.1 setAdapter(ExpandableListAdapter adapter) 3.2 setOnGroup...

云上道人的博客 1816

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android ExpandableListView 详细用法全解析

除了使用系统提供的简单布局,我们还可以自定义分组和子项的视图,以实现更丰富的界面效果。以下是一个自定义视图的示例:自定义分组布局文件 group_item.xml<ImageView<TextView自定义子项布局文件 child_item.xml<ImageView<TextView修改适配器中的 getGroupView 和 getChildView 方法@Override@Override。

陈志宝‑天津|Android&Java 全栈开发工程师 1508

Kotlin ExpandableListView可扩展二级列表

var sc = SitCode(1, “1”, “一栋宿舍”);list.add(sc)sc = SitCode(11, “1C”, “宿舍2003”);list.add(sc)sc = SitCode(15, “1D”, “宿舍2004”);sc = SitCode(21, “2C”, “宿舍2007”);sc = SitCode(2, “1A”, “宿舍2001”);sc = SitCode(7, “1B”, “宿舍2002”);sc = SitCode(16, “2”, “二栋宿舍”);

2501_90254378的博客 823

ExpandableListView使用ScrollView嵌套ExpandableListView,列表显示不全

ExpandableListView在ScrollView显示不全的 解决办法有两种 第一种是在ScrollView的控件中添加 android:fillViewport="true" 这属性 但是添加这属性的不好的地方就是不能滑动了 第二种解决办法就是自定义view /** * Created by Xk * on 2019/5/31 * 860618071 */ pub...

xukangone的博客 760

ExpandableListView 项目教程

ExpandableListView 项目教程 1. 项目的目录结构及介绍 ExpandableListView 项目的目录结构如下: ExpandableListView/ ├── app/ │ ├── build/ │ ├── libs/ │ ├── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── c...

gitblog_00849的博客 241

二级菜单——ExpandableListView以及用RecyclerView实现

前言 二级菜单这个功能,相信很多app都需要这个功能,而我最近的项目中也有这样的需求。正常情况下,快捷的实现方式是使用Android提供的二级菜单控件——ExpandableListView,并编写相应的adapter,继承自BaseExpandableListAdapter即可。而非正常情况下,就是自己去实现这个二级菜单控件功能,而实现的基础就是RecyclerView。 优缺点 Expa...

树懒的博客 1万+

Android学习之ExpandableListView

什么是ExpandableListView ExpandableListView是扩展的ListView,继承自ListView;ExpandableListView可以实现点击展开列表,再点击收缩回去的效果。 ExpandableListView的使用 首先需要在主布局文件中声明ExpandableListView; <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.and

wsb_2526的博客 2767
上一篇: 手持ActivityLifecycleCallbacks,监听前后台状态如此舒服
下一篇: ListView条目中有CheckBox点击事件失效问题
JSON_ZJS
博客等级 码龄9年 30粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值