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的背景)

PhotonVPS:美国Linux VPS半价促销2.5美元/月起,可选美国洛杉矶/达拉斯/芝加哥/阿什本等四机房

photonvps怎么样?photonvps现在针对旗下美国vps推出半价促销优惠活动,2.5美元/月起,免费10Gbps DDoS防御,Linux系统,机房可选美国洛杉矶、达拉斯、芝加哥、阿什本。以前觉得老牌商家PhotonVPS贵的朋友可以先入手一个月PhotonVPS美国Linux VPS试试了。PhotonVPS允许合法大人内容,支持支付宝、paypal和信用卡,30天退款保证。Photo...

Sharktech($49/月),10G端口 32GB内存,鲨鱼机房新用户赠送$50

Sharktech 鲨鱼机房商家我们是不是算比较熟悉的,因为有很多的服务商渠道的高防服务器都是拿他们家的机器然后部署高防VPS主机的,不过这几年Sharktech商家有自己直接销售云服务器产品,比如看到有新增公有云主机有促销活动,一般有人可能买回去自己搭建虚拟主机拆分销售的,有的也是自用的。有看到不少网友在分享到鲨鱼机房商家促销活动期间,有赠送开通公有云主机$50,可以购买最低配置的,$49/月的...

Spinservers:美国独立服务器(圣何塞),$111/月

spinservers是Majestic Hosting Solutions,LLC旗下站点,主营美国独立服务器租用和Hybrid Dedicated等,spinservers这次提供的大硬盘、大内存服务器很多人很喜欢。TheServerStore自1994年以来,它是一家成熟的企业 IT 设备供应商,专门从事二手服务器和工作站业务,在德克萨斯州拥有40,000 平方英尺的仓库,库存中始终有数千台...

expandablelistview为你推荐
ipv6电视为什么IPv6电视软件不消耗上网流量呢素数算法求100以内的素数的算法网络视频下载器谁能给我找个网络视频下载器和转换器?oledbdatareaderDataReader和IDataReader的区别?比思论坛永久域名不知道为什么 比思论坛的网站打不开 怎么办呐pat是什么格式photoshop填充图案是pat格式,需用什么软件打开?请高人指点,谢谢~手机软件开发工具怎样开发手机软件特斯拉model3降价特斯拉model 3中国有补贴吗怎么查微信注册时间怎么知道微信上次登录时间pass是什么在英语里pass是什么意思
服务器空间租用 flashfxp怎么用 fastdomain godaddy支付宝 日志分析软件 智能骨干网 帽子云 129邮箱 购买国外空间 四川电信商城 域名与空间 便宜空间 网站加速软件 smtp服务器地址 新加坡空间 97rb hdchina windowsserver2012r2 香港打折信息 流媒体服务器软件 更多