android 伸缩控件ExpandableListView 展开失败的可能原因。
(原创)转载请声明出处http://www.cnblogs.com/linguanh/
问题原型:
ExpandableListView 展开失效。
--------------------直接看结论请拉置 红线下-------------------
早在同年5月份的时候我写过一篇 自定义 ExpandableListView 收缩类的 博文,那时候我还没碰到这个问题,
一切很顺利, 入口:http://www.cnblogs.com/linguanh/p/4521257.html


直到今天,本来想做个日程表,考虑到月份是可选的,所以想重新使用 ExpandableListView,逐使用之。我们知道使用 ExpandableListView 要为它配置个 数据是配置器,也就是ExpandableListAdapter,它有9个接口函数要求重写,具体请转至我的的专题介绍了解它:http://www.cnblogs.com/linguanh/p/4521257.html
其中有一个是:
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
它的作用是让我们返回一级目录的 view,通常使用五大布局中的一种,例如:
LinearLayout Group =(LinearLayout) RelativeLayout.inflate(上下文, R.layout.布局, null); 我们就在 getGroupView 函数中返回这个view,注意:里面 R.layout.布局 就是我们的自定义一级目录 xml 布局
文件,也是我要说的坑所在。 我在确定编码没问题之后,就点运行了,几秒后, getGroupView 加载的一级目录 xml 布局显示出来了,OK,很好,然后我就点击了,点了之后发现,妹的,没展开二级目录。然后就屁颠屁颠地回去找bug,代码确定没错,于是加入了很多log,再次运行,查看日志。我勒个去!
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
这货居然没被执行,里面的log 没打印出。于是下意识地去查看我在getChildView引入的 xml 布局,我上面说的第一个 xml 布局是一级目录的,在getChildView 是二级目录的 布局。查看之后,实在找不出它有错的理由,于是乎,就找之前成功过的例子 xml 文件替换进去,运行,点击,还是不行,当时我就fuck 了 dog 了。
然后转至 getGroupView 一级目录 xml布局的引入函数,查看仍找不出错的理由,同上,用之前成功过的替换下,运行,点击,made,居然行了。然后我就开始 把原来不行的 布局文件 和 替换后可以的来对比。
控件类型对比差异:不行的布局文件带有 button 控件,可以的没有带有button,其它地方一样。 看到这,突然觉得,是不是 button 的点击属性覆盖了原本的一级目录可点击属性?再看看 button 的宽和高,即
它的有效点击范围,都是 wrap,按道理没占满整个父view,我点其他地方,不就是没点到它吗。
可事实就是如此。button 的存在导致 ExpandableListView 一级目录可点击性失效。
这真是天坑,马上百度百度,看看有没有相同案例,百度了才发现,有碰到和我相同问题的,但是都没有解决!!!
心情有点小激动,哈哈。 ---------------------------------------------------------
总结:
ExpandableListView 的 数据适配器 ExpandableListAdapter 中的 getGroupView 函数中所引入的自定义一级目录 xml 布局文件不能带有 button,否则会导致展开失效,ImageButton没尝试过,不过可能也是不行的。 举例对比:
反例,带有button的
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"> <ImageView
android:layout_marginLeft="@dimen/extend_x_left"
android:id="@+id/entend_x"
android:background="@drawable/extend_x"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:alpha="0.8"
android:id="@+id/time_coustom"
android:layout_marginLeft="20dp"
android:text="1:00pm"
android:textSize="17dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/down"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:background="@drawable/right"
android:layout_width="15dp"
android:layout_height="15dp" />
</LinearLayout>
可行的:
上面的 代码去掉 button
android 伸缩控件ExpandableListView 展开失败的可能原因。的更多相关文章
- Android UI控件----ExpandableListView的基本用法
ExpandableListView介绍 ExpandableListView的引入 ExpandableListView可以显示一个视图垂直滚动显示两级列表中的条目,这不同于列表视图(ListVie ...
- Android 开源控件与常用开发框架开发工具类
Android的加载动画AVLoadingIndicatorView 项目地址: https://github.com/81813780/AVLoadingIndicatorView 首先,在 bui ...
- Android记录11-控制ExpandableListView展开和关闭
Android记录11-控制ExpandableListView展开和关闭 2013年12月5日 工作记录 我们在使用ExpandableListView可能会遇到各种问题,比如说只展开一个组,关闭其 ...
- android 基础控件(EditView、SeekBar等)的属性及使用方法
android提供了大量的UI控件,本文将介绍TextView.ImageView.Button.EditView.ProgressBar.SeekBar.ScrollView.WebView ...
- Android基本控件之Menus
在我们的手机中有很多样式的菜单,比如:我们的短信界面,每条短信,我们长按都会出现一个菜单,还有很多的种类.那么现在,我们就来详细的讨论一下安卓中的菜单 Android的控件中就有这么一个,叫做Menu ...
- Android:控件布局(相对布局)RelativeLayout
RelativeLayout是相对布局控件:以控件之间相对位置或相对父容器位置进行排列. 相对布局常用属性: 子类控件相对子类控件:值是另外一个控件的id android:layout_above-- ...
- Android:控件布局(线性布局)LinearLayout
LinearLayout是线性布局控件:要么横向排布,要么竖向排布 决定性属性:必须有的! android:orientation:vertical (垂直方向) .horizontal(水平方向) ...
- 矩阵, 矩阵 , Android基础控件之ImageView
天下文章大家抄,以下所有内容,有来自copy,有来自查询,亦有自己的总结(目的是总结出自己的东西),所以说原创,不合适,说是转载也不恰当,所以我称之为笔记,可惜没有此分类选项,姑且不要脸一点,选择为原 ...
- Android给控件添加触摸回调
Android给控件添加触摸回调 脑补一个场景,一个页面点击某个按钮会弹出PopupWindow,然后点击PopupWindow以外的任意位置关闭 效果图 实现方法 可以在布局的最外层容器监听触摸事件 ...
随机推荐
- Daily Scrum02 12.17
软件发布到了最后的阶段,大家都在抓紧时间DEBUG,美化界面,做各种测试…… 大家抓紧最后一把劲,一起努力冲最后一下,努力吧! Member 任务进度 下一步工作 吴文会 会议组织 会议总结,发表博客 ...
- 深入浅出 妙用Javascript中apply、call、bind
apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. Jav ...
- java并发编程(十八)阻塞队列和阻塞栈
阻塞队列 阻塞队列是Java 5并发新特性中的内容,阻塞队列的接口是java.util.concurrent.BlockingQueue,它有多个实现类:ArrayBlockingQueue.Dela ...
- Javascript中call和apply的区别和用法
JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别.其实就是更改对象的内部指针,即改变对象的this指向的内容.这在面向对象的js编程过程中有时是很有用的.call ...
- C++指针类型识别正确姿势
指针是C和C++中编程最复杂也是最有技巧的部分,但对于新手来说,指针无疑是最致命的,让很多人望而退步.不过很多事情都是从陌生开始,然后渐渐熟悉起来的,就像交朋友一样,得花点时间去培养感情才行.不过指针 ...
- C语言dll文件的说明以及生成、使用方法
最近在搞一些小项目,由于要涉及到跟其它语言进行交互,动态链接库变成了不二的选择.为此也查阅了很多资料,将动态链接库的相关知识在此做一个整理. 一.动态链接库概述 动态链接库(Dynamic Link ...
- 执行mysqld_safe报错:mysqld does not exist or is not executable
执行mysqld_safe报错: [root@edu data]# /usr/local/mysql5.7/bin/mysqld_safe --user=mysql160427 12:41:28 my ...
- 跟服务器交互的登录Demo
服务器写死 账号密码,演示登录 服务器代码: 开发工具MyEclipse public class LoginServlet extends HttpServlet { /** * The doGet ...
- Entity Framework扩展库
这个Entity Framework扩展完全支持EF 5.0/6.0,项目地址 https://github.com/loresoft/EntityFramework.Extended,这个库支持批量 ...
- 安卓动态调试七种武器之长生剑 - Smali Instrumentation
安卓动态调试七种武器之长生剑 - Smali Instrumentation 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是 ...