android简单的可折叠的格子列表

2024-02-01 20:58

本文主要是介绍android简单的可折叠的格子列表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求:实现一个可以折叠列表,折叠项下一级为一个图片列表,图片列表按等宽高格子式排列,一行N个。每个折叠项子级图片列表中的图片数目不多,在10个以内。

接触安卓开发的时间不多,供大家借鉴。

在不借用开源代码只在现有平台开发的情况下,做过4种尝试:

1.使用ListView嵌套GridView

这可能是刚进入android大家庭之后最容易想到的方法,有GridView干嘛要造轮子?之前有过这种想法,但是有印象据说AdaptView嵌套会产生滚动问题,因为android的事件流是基于焦点的,从action_down开始,如果两个嵌套且都能够实现滚动,则需要重写事件分发相关部分。

再看这个题目,子项很少,不需要滚动,第一种想法就是吧GridView高度固定:

public class NoScrollGridView extends GridView {public NoScrollGridView(Context context) {super(context);}public NoScrollGridView(Context context, AttributeSet attrs) {super(context, attrs);}public NoScrollGridView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@Overridepublic void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, expandSpec);}
}
这种方法实现出来效果比较卡。


2.使用RecyclerView嵌套GridView

RecyclerView的bind相对于GridView的getView,调用频度较少。GridView同上。

效果提升不明显,并且第一级展开后界面会莫名其妙地跳来跳去,半天没定位明白是什么鬼。把GridView换成非AdaptView后,问题消失。


3.使用RecyclerView嵌套GridLayout

安卓4.0之后封装了格子布局,不用自己封装了。既然RecyclerView内嵌套AdapteView会出现莫名其妙的问题,就用它好了。

当控件宽高较小、二级项数较少时较为流畅,增加宽高后逐渐卡顿。


4.使用ExpandableListview嵌套单行

之前的控件选型失败。虽然bind调用频度低于getView,但在RecyclerView进行bind的时候还是实例化了过多的View导致卡顿。

当前想到唯一的可行方法就是用LinearLayout封装一个横向单行布局类,用来排列一行,然后父级采用ExpandableListView。

这种方法避免了卡顿,而且当子项项数特别多的时候同样适用,可以实现点击拉取成吨数据的需求。


第四种方法是暂时能想到的可行的方案。菜鸟一枚,供参考。


这篇关于android简单的可折叠的格子列表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668443

相关文章

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

Python中合并列表(list)的六种方法小结

《Python中合并列表(list)的六种方法小结》本文主要介绍了Python中合并列表(list)的六种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、直接用 + 合并列表二、用 extend() js方法三、用 zip() 函数交叉合并四、用

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

C++类和对象之初始化列表的使用方式

《C++类和对象之初始化列表的使用方式》:本文主要介绍C++类和对象之初始化列表的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C++初始化列表详解:性能优化与正确实践什么是初始化列表?初始化列表的三大核心作用1. 性能优化:避免不必要的赋值操作2. 强

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四