使用ExpandableListView——当有Group选项展开时,如何正确获取长按的Group选项。

当我们使用ExpandableListView时,实现点击一个GroupView则展开ChidView,那么这个时候,Adapter的大小前后是有变化的。

例如:假设有20个GroupView,每个GroupView都有一个ChildView。当全部GroupView都没有被展开的时候,Adapter的size是20;而当我们展开一个GroupView,显示出一个ChildView的时候,Adapter的size就增加了1。这个必须了解的。

当我们需要添加长按每一个GroupView的时候,获取当前被长按的GroupView的对象时,使用以下方法会出现如下问题。

[java] view plaincopy

  1. @Override
  2. public void onCreateContextMenu(ContextMenu menu, View v,
  3. ContextMenuInfo menuInfo) {
  4. super.onCreateContextMenu(menu, v, menuInfo);
  5. MenuInflater inflater = getMenuInflater();
  6. inflater.inflate(R.menu.booklist_context, menu);
  7. ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
  8. // 获取当前长按项的下标
  9. final int index = ExpandableListView
  10. .getPackedPositionGroup(info.packedPosition.);
  11. //System.out.println("index----------->" + index);
  12. //System.out.println("Adapter的size------------->" +  expListView.getAdapter().getCount());
  13. mBookInfo = (BookInfoDTO) expListView.getAdapter().getitem(index);
  14. }

1、当所有的GroupView都没有展开的时候,能够正确获取每个GroupView的下标,通过Adapter就能得到绑定到这个GroupView中的对象。

2,、但,当有的GroupView被展开的时候,就不能使用上面的方法获取绑定在GroupView中的对象了。原因上面已经给出,因为此时的Adapter的size已经被改变。而此时获取的下标是20个GroupView的相对下标。跟Adapter中的下标所对应的对象并不一致,因为Adapter中还包含了被展开的ChildView。

使用以下的方法可以解决上面遇到的问题。

[java] view plaincopy

  1. @Override
  2. public void onCreateContextMenu(ContextMenu menu, View v,
  3. ContextMenuInfo menuInfo) {
  4. super.onCreateContextMenu(menu, v, menuInfo);
  5. MenuInflater inflater = getMenuInflater();
  6. inflater.inflate(R.menu.booklist_context, menu);
  7. ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
  8. View vin = (View)info.targetView;
  9. mBookInfo = (BookInfoDTO)vin.getTag();
  10. }

在设配器中,为每一个GroupView set 一个Tag,也就是我们需要长按时候提出的对象。

这样我们就可以在以上的方法中取出每个GroupView中 的Tag,也就是我们绑定到GroupView中的对象。

这样就不用依赖于变化的Index。

/***************************************************************************************/

可以用控件的tag保存当前项的索引  然后前端  获取控件 的tag

http://blog.csdn.net/kavensu/article/details/8307178

时间: 2024-11-06 13:55:53

使用ExpandableListView——当有Group选项展开时,如何正确获取长按的Group选项。的相关文章

Android 开发时如何正确获取使用扩展存储路径

Android 开发时如何正确获取使用扩展存储路径 先介绍一下Android的存储 在 2.x 版本中,Android设备都是单存储,第三方App写文件,必须申请 WRITE_EXTERNAL_STORAGE 权限: 在4.0之后,Android设备开始有了内置闪存,即 primary storage,并且可以外置SD卡,即 secondary external storage device: WRITE_EXTERNAL_STORAGE 权限变成了仅仅控制 primary storage,同时

Dynamics CRM EXCEL导入数据字段类型为选项集时的注意事项

在开始先展示下CRM的导入数据涉及选项集字段时的一个问题 下图是选项集字段的属性 下图是我要导入的excel中的列值,可以看出列明和字段名是一致的,而列值却不是选项集中已有的选项 在导入校验时,只要字段名对上了,选项集字段并未报任何警告提醒 导入成功后针对excel中的列值在选项集中没有的,系统会自动创建 这是一个麻烦,所以怎样才能避免这个问题,或者说在excel中的列值和选项集字段对不上时如何能有个提醒,下面来说解决办法 将前面导入的excel的列明更改下和系统选项集字段的属性名不同,再对列值

IE8 下 select option 内容过长 , 展开时信息显示不全解决办法

1 IE8 下 select option 内容过长 , 展开时信息显示不全 , 简单折衷的方式就是给 option 加上 title 属性 , 2 但是又不想一个个的修改,怎么办呢,代码如下 : 3 4 //select option bind title 5 $(document).delegate('select', 'mouseover', function() 6 { 7 var $this = $(this); 8 if($this.data('data-bind-title'))

故障现象:Win7 访问共享时输入正确密码仍然提示密码错误,此帐号在其它机器上可以正常使用,排除帐号密码不对导致的问题。

解决方案一 安装win7的机器日期不对,调整后故障排除. 解决方案二 1.直接按下win+r键,输入secpol.msc,打开本地安全策略.2.找到"安全设置"的"本地策略"的"安全选项"3.在右边一栏找到"网络安全:LAN管理器身份验证级别",双击进入4.在默认状态选项下,英文版应该为"no defined",中文版为空.下拉那个默认选项,选择"仅发送NTLM响应"重启后故障排除. 故

同一域名对应多个IP时,PHP获取远程网页内容的函数

同一域名对应多个IP时,PHP获取远程网页内容的函数 [文章作者:张宴 本文版本:v1.0 最后修改:2008.12.15 转载请注明原文链接:http://blog.zyan.cc/post/389/] PHP获取远程网页内容有多种方式,例如用自带的file_get_contents.fopen等函数. 引用 <?php echo file_get_contents("http://blog.zyan.cc/abc.php"); ?> 但是,在DNS轮询等负载均衡中,同一

浅析在项目开发(使用Delegate回调时)如何正确使用ARC

ARC(自动引用计数)是2011年伴随iOS5来的一项技术.简单来说就是通过LLVM3.0编译器帮助程序处理“一大部分”OC中的内存管理.为什么是“一大部分”,这个等会儿解释. 一直以来内存管理这个话题都是初学iOS开发,初学OC语言必须要面对的知识点,也是大家容易出错的地方.对象释放后调用会造成crash.不释放的对象会造成内存泄漏这些问题困扰着初学者.ARC的到来按理说应该是福音,不需要自己管理内存了嘛,多简单.但是随之而来的两个问题:1,我发现周围有些拥有2-5年开发经验的“半老手”(要谦

Extjs的form跨域提交文件时,无法获取返回结果

form文件表单跨域提交时,无法获取远程服务器的返回结果,form提交代码如下: form.submit({ url:'http://{remoteUrl}/hgisserver/wrds/file', waitMsg: 'Reading your file...', method : 'POST', success: function(fp, o) { console.log(o); }, failure: function(form, action) { console.log(action

低版本ie保存文件时,文件名过长被截断

在工作中有一个下载文件的功能,遇到一个低版本ie保存文件时,文件名过长被截断的问题. asp.net MVC下载文件代码: 1 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(downloadFilePath); 2 request.KeepAlive = false; 3 WebResponse response = request.GetResponse(); 4 Stream stream = response.GetR

解决pyinstaller在单一文件时无法正确添加权限清单问题,(UAC,uac_admin,manifest,asInvoker,python,requireAdministrator)

做了3天的win10的兼容性测试,大部分时间都卡权限获取这了. 以下废话很多,想直接找解决方法,请跳至红字 首先,简单说下uac,自vista后windows再次加严了权限管理,uac (账户控制) ,就是程序对访问一些敏感资源时的限制,当程序需要访问限制资源时会弹窗让用户选择.现在系统主要分两种权限管理员权限和标准权限,当你点击一个程序时只会调用标准权限,这时对windows文件夹,Program文件夹和部分关键的注册表的修改都会报错,访问应该还可以.当你需要安装驱动或者程序时可以使用右键后点