expandablelistview怎么设置ExpandableListView每一行group的距离

expandablelistview  时间:2021-06-16  阅读:()

在ExpandableListView 下方设置一个按钮

public static void setExpandableListViewHeight(ExpandableListView listView, int childHeight) { // 获取ListView对应的Adapter ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = childHeight; for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目 View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); // 计算子项View 的宽高 totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度 } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); // listView.getDividerHeight()获取子项间分隔符占用的高度 // params.height最后得到整个ListView完整显示需要的高度 listView.setLayoutParams(params); }

怎样在Expandablelistview上加展开动画效果

解决方案Github pull request链接: Android的原生提供和展开分组的ListView:ExpandableListView,然而相比于iOS上原生提供的UITableView,其UI能力不足,比如没有原生的动画展开和收起效果支持。

在开源代码社区我们可以找到几个为Android的ExpandableListView添加的动画解决方案。

其中idunnololz的AnimatedExpandableListView是不错的方案之一。



它的优点:性能较好,提供源代码而不是library(这点很重要),注释清晰。

然而性能的优化是没有止境的,当分组内的子view(childView)变得复杂,或者ListView的parent结构复杂,例如内嵌与其它LinearLayout, FrameLayout或者ScrollView之中,并且parent的使用自定义的重写的onMeasure()方法时,生成childView的效率就会大大影响应用的性能。

合理使用AnimatedExpandableListView的关键是在于AnimatedExpandableListView#getRealChildView()的实现,这是应用开发的责任。

实际项目中,通过优化getRealChildView(),动画效果的启动时间从1340ms减少到了680ms (展开一个含有5个子项目的分组)。

而发现的问题的定位和解决方案,基本是用过使用Android提供的method tracing方法(android.os.Debug.startMethodTraceing)进行分析。

优化前的getRealChildView()实现,需要大量的view初始化,因为没有可用的convertView,而事实上,在动画绘制阶段时生成的childView完全可以被重用,及时convertView并为给出。

如下面的traceview profile看到的,优化前,getChildView()消耗了超过一秒的时间。

优化后的性能: 这是如何做到的呢?这需要我们再研究一下动画展开的原理,也就是getChildView()里面耗时最长的是哪些动作。

首先排除其他因素的影响,专注于AnimatedExpandableList本收得使用,我们使用GitHub上原生提供的Example来做分析:这是展开5个子项目的分组的情况,注意5个子分组的view生成,LayoutInflater.inflate被执行了10次,是其两倍。

而inflate是相当耗时的。

有没有方法来减少这部分工作消耗呢? 方法是使用Android推荐的LRU cache来保存childView的。

关于LruCache,请见Android的reference documents和training。

这里特别要注意的是,childView在dataSet改变时需要重新生成,而不是在cache中获得,这里使用的方法是判断childView的type。

在自己的项目中需要根据情况认真考虑dataSet改变如何更新cache的问题。

效果如下所示:inflate的次数减少到5次,一次都不浪费。

消耗时间从160ms降低到80ms。

expandablelistview 与 listview 哪个效率高

您好,我来为您解答:   现在android开发貌似还没有太多的规范,google提倡的解决方法其实也不一定就是最妥善的,还是具体问题具体分析。

比如实现一个最简单的iew就有不只两种代码结构。

至于哪个好哪个不好,只能说看应用场景和复用程度吧。

  如果我的回答没能帮助您,请继续追问。

expandablelistview object getchild方法什么时候调用

想实现按日期分类照片,功能大概已经实现 有3个组 "2012-04-05", "2012-04-06", "2012-04-12" Run程序后我单击 2012-04-05这个组可以显示对应的照片,但当我继续单击2012-04-06的时候出现的是 2012-04-05这个组下面的照片,接着2012-04-12的也是一样的情况 我重新Run,单击2012-04-12,出现的照片稳和,单击其他两个组,悲剧重演,请高手指教。





代码如下 ListViewActivity public class ListViewActivity extends Activity { ExpandableListView expandableListView; ListViewAdapter treeViewAdapter; public String[] groups = { "2012-04-05", "2012-04-06", "2012-04-12"}; public String[][] child = { { "" }, { "" }, { "" } }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); treeViewAdapter = new ListViewAdapter(this, ListViewAdapter.PaddingLeft >> 1); expandableListView = (ExpandableListView) this .findViewById(R.id.expandableListView); List treeNode = treeViewAdapter.GetTreeNode(); for (int i = 0; i < groups.length; i++) { ListViewAdapter.TreeNode node = new ListViewAdapter.TreeNode(); node.parent = groups[i]; for (int ii = 0; ii < child[i].length; ii++) { node.childs.add(child[i][ii]); } treeNode.add(node); } treeViewAdapter.UpdateTreeNode(treeNode); expandableListView.setAdapter(treeViewAdapter); }

expandablelistview和listview有什么区别

iew和iew有什么区别 本例程序中,pa是一个指针数组,三个元素分别指向二维数组a的各行。

然后用循环语句输出指定的数组元素。

其中*a[i]表示i行0列元素值;*(*(a+i)+i)表示i行i列的元素值;*pa[i]表示i行0列元素值;由于p与a[0]相同,故p[i]表示0行i列的值;*(p+i)表示0行i列的值。

读者可仔细领会元素值的各种不同的表示方法。

应该注意指针数组和二维数组指针变量的区别。

这两者虽然都可用来表示二维数组,但是其表示方法和意义是不同的。

二维数组指针变量是单个的变量,其一般形式中"(*指针变量名)"两边的括号不可少。

而指针数组类型表示的是多个指针(一组有序指针)在一般形式中"*指针数组名"两边不能有括号。

例如: int (*p)[3]; 表示一个指向二维数组的指针变量。

该二维数组的列数为3或分解为一维数组的长度为3。

int *p[3] 表示p是一个指针数组,有三个下标变量p[0],p[1],p[2]均为指针变量。

指针数组也常用来表示一组字符串,这时指针数组的每个元素被赋予一个字符串的首地址。

指向字符串的指针数组的初始化更为简单。

例如在例10.32中即采用指针数组来表示一组字符串。

其初始化赋值为: char *name[]={"Illagal day",

怎么设置ExpandableListView每一行group的距离

众所周知,android的ExpandableListView相当于ListView中嵌套ListView,而主ListView的背景可以通过android:background属性来设置,那么子ListView可不可以用一种相对简单的方式设置其背景呢?(不是设置某个单独的item背景,而是一次性设置整个ListView的背景)

€4.99/月Contabo云服务器,美国高性价比VPS/4核8G内存200G SSD存储

Contabo是一家运营了20多年的欧洲老牌主机商,之前主要是运营德国数据中心,Contabo在今年4月份增设新加坡数据中心,近期同时新增了美国纽约和西雅图数据中心。全球布局基本完成,目前可选的数据中心包括:德国本土、美国东部(纽约)、美国西部(西雅图)、美国中部(圣路易斯)和亚洲的新加坡数据中心。Contabo的之前国外主机测评网站有多次介绍,他们家的特点就是性价比高,而且这个高不是一般的高,是...

腾讯云新用户省钱秘笈购买云服务器

目前国内云计算市场竞争异常激烈,尤其是国内的腾讯云、阿里云、景安等商家促销活动一波接一波的进行,对于有需要的用户确实得到不小的实惠。但是这样给予国内的主机商确实是比较大的打击,毕竟这些商家的背景和实例强劲,即便是贴本补贴优惠,也是不怕的。前两年阿里一家各种活动促销,确实在国内市场占据主要的市场地位,腾讯云开始两年没有较大的吸引用户,不过这两年的发展还是比较稳健的。我们很多网友在之前肯定也享受到一些...

妮妮云(30元),美国300G防御 2核4G 107.6元,美国高速建站 2核2G

妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款,超过2天不退款 物...

expandablelistview为你推荐
windowsmediawindows media player怎么打开网络视频下载器网络视频下载工具哪个好用?暴力破解rar求暴力破解rar压缩包软件shoujiao如何区分是不是颈椎病?音乐代码在html中插入mp3音频的代码是什么java程序员招聘女java程序员好找工作嘛particular教程有没有制作花瓣飘落的AE教程validdate怎样解决oracle报错is not a valid date and timeflex是什么这些b365m和b360m什么意思driversbackup电脑里有个“Backup”文件夹是干什么的
东莞虚拟主机 老域名 域名城 godaddy域名注册 高防服务器租用选锐一 免费顶级域名 budgetvm ftp空间 kvmla wdcp 表格样式 patcha hnyd 本网站服务器在美国 我爱水煮鱼 百兆独享 合租空间 免费活动 metalink cxz 更多