android简单的可折叠的格子列表
来源:互联网 发布:mac口红试色 编辑:程序博客网 时间:2024/04/26 14:18
需求:实现一个可以折叠列表,折叠项下一级为一个图片列表,图片列表按等宽高格子式排列,一行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简单的可折叠的格子列表
- 简单的树形列表(无限级次 可折叠)
- android:使用BaseExpandableListAdapter实现可折叠的列表
- [Android]BaseExpandableListAdapter实现可折叠的列表
- android:使用BaseExpandableListAdapter实现可折叠的列表
- Android可折叠的textview
- android 仿QQ列表可折叠+自定义Dialog结合的DEMO
- 使用BaseExpandableListAdapter实现可折叠的列表
- ExpandableListView(可折叠列表)的基本使用
- 可折叠的列表ExpandableListView及其适配器
- 2.10 ExpandableListView(可折叠列表)的基本使用
- ExpandableListView(可折叠列表)的基本使用
- Android中可折叠的表格
- Android实现可折叠的listview
- 简单的二级导航菜单(可折叠)
- js 可折叠展开的简单目录
- Android基础入门教程——2.4.12 ExpandableListView(可折叠列表)的基本使用
- Android之可折叠Toolbar的实现
- exit(0) exit(1) return
- linux网络报文接收发送浅析
- LeetCode-Binary Tree Inorder Traversal
- 为什么服务器磁盘io会这么慢
- UVAOJ 12096 The SetStack Computer(STL的运用)
- android简单的可折叠的格子列表
- OpenMP
- 基础面试题(一)
- poj 3264 Balanced Lineup RMQ线段树实现
- 自己动手建立maven项目
- LeetCode-Binary Tree Postorder Traversal
- js给Li标签增加class
- linux下测试程序运行时间
- Android核心库