南京学思XSuperNest使用addHeaderView注意事项

原创 2015年11月19日 22:08:00
在做学思钢板管理系统的项目中用到了addHeaderView,现在把注意事项记下来
1、item内如果有button等控件时,在监听listview的onitemclick事件时,焦点会被item内的button、imagebutton等控件抢走,从而导致在listview设置了onitemclick事件后不会被触发。解决方法是在初始化item的时候屏蔽掉其内部button等控件的焦点获取,具体方法可以在自定义item的根控件中调用:
[java] view plaincopy
setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);   
这样就能阻塞字控件抢夺焦点,listview的onitemclick就能被正确触发,同时对item内部的button等控件也没有影响,他们在被点击时照样可以触发自身的点击事件。
2、当listview需要添加headerview时,可以通过调用listview的addHeaderView(headView, null, false) 方法,该方法还有一个重载方法 addHeaderView(headView);这两个方法的区别是前一个方法可以控制header是否可以被selected,如果不想被selected则将第三个参数设置成false;
3、接着上面说的添加header,添加header时调用的addHeaderView方法必须放在listview.setadapter前面,意思很明确就是如果想给listview添加头部则必须在给其绑定adapter前添加,否则会报错。原因是当我们在调用setAdapter方法时会android会判断当前listview是否已经添加header,如果已经添加则会生成一个新的tempadapter,这个新的tempadapter包含我们设置的adapter所有内容以及listview的header和footer。所以当我们在给listview添加了header后在程序中调用listview.getadapter时返回的是tempadapter而不是我们通过setadapter传进去的adapter。如果没有设置adapter则tempadapter与我们自己的adapter是一样的。listview.getadapter().getcount()方法返回值会比我们预期的要大,原因是添加了header。
4、接着上面的tempadapter说,我们自定义adapter里面的getitem方法里面返回的position是不包括header的,是我们自定义adapter中数据position编号从0开始,也就是说与我们传进去的list的位置是一样的。
[java] view plaincopy
@Override  
public View getView(int position, View convertView, ViewGroup parent) {  
// TODO Auto-generated method stub  
Log.i("adapter", "position:"+position);   //这个position就是我们数据的真实位置  
  }  
而listview的onitemclick方法中:
[java] view plaincopy
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)   


arg2是当前click的位置,这个位置是指在tempadapter中的位置,从0开始如果listview中添加了header则0代表header。


南京学思XSuperNEST中ListView优化

XSuperNEST用ListView把数据展示给用户,为了更好的增强用户体验,我们要对其进行进一步的优化。 我这里说一下我用 ListView 的一些经验,为了尽量说的全面一些,这里列一些...
  • njxuesi
  • njxuesi
  • 2015年11月19日 22:09
  • 133

面试问题 (思杰,华为,calix)

思杰: 1 : 项目经验: 做项目遇见什么问题,怎么解决的?具体一点 2:如果碰见一些实际问题,例如网站只有百度上不去,怎么办?解决思路? 答:看提示的错误信息,根据具体的信息一步步排查。比如问eri...
  • tangzihao_c
  • tangzihao_c
  • 2017年02月08日 15:09
  • 904

访学有感------------南京访学一周小记

一.初探南京 南京,简称宁,是江苏省会。南京地处长江下游沿岸,江苏省西南部,邻靠安徽省。初到南京时,将近九点,晚上,坐在地铁上看南京,表面上与北上广等其他大都市没有什么区别。但是,走在南京的小巷上,...
  • lxx_nico
  • lxx_nico
  • 2014年11月30日 23:26
  • 1667

面试总结10--Citrix面试

Citrix算是面试的第一家外企,从笔试到面试整个流程可以看得出来外企对求职者的英语水平,以及个人能力还是很看重的。首先,笔试是全英文试卷,而且最后有英译中的翻译大300字类似于一个技术说明文档翻译,...
  • u012286517
  • u012286517
  • 2016年01月04日 22:00
  • 2810

思杰(Citrix)南京笔试(暑期实习)

今天思杰南京在南航老校区进行了笔试,上午的雨那个叫大,结果一间大教室还是坐满了,签名的时候目测了一下,有南大,东大,南航,南邮的等等.... 不久发了一套试卷,全英文的,搞的还真像个外企,还要签保密协...
  • gningh
  • gningh
  • 2013年03月17日 15:44
  • 8124

南京学思基于Oracle数据库开发的优点

 现阶段南京学思使用的数据库是Oracle数据库,Oracle数据库是一种大型数据库系统,一般应用于商业,政府部门,它的功能很强大,能够处理大批量的数据,在网络方面也用的非常多。 一般Orac...
  • njxuesi
  • njxuesi
  • 2015年05月15日 11:37
  • 559

南京学思利用Json进行数据传输

一.Json的简介。 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 JSON 数据的书写格式是:名称/值对。名称/值对组合中的名称写在前面(在双引...
  • njxuesi
  • njxuesi
  • 2015年05月29日 14:52
  • 285

装饰设计模式--实现RecyclerView的addHeaderView()方法

分析ListView源码来实现RecyclerView的addHeaderView()方法RecyclerView现在应该有越来越多的小伙伴在项目中用来替代ListView和GridView了。仅仅通...
  • m0_37194191
  • m0_37194191
  • 2017年06月05日 11:21
  • 391

初学ui设计的一些注意事项

对于初学UI设计的人而言,可能对UI具体是做什么,或者自己是否能顺利转行胜任这样的岗位存在一定的顾虑,今天我们就来重点说说UI是做什么的,以及想学UI到底要如何避免走弯路,快速的学成。   问题...
  • qq_32506555
  • qq_32506555
  • 2017年07月03日 12:21
  • 279

《编程之美》学而思 - 斐波那契数列(Fibonacci sequence)

《编程之美》学而思 - 斐波那契数列(Fibonacci sequence)flyfish另一个篇 利用矩阵求斐波那契数列int FibonacciRecursion(int n)//递归 { ...
  • flyfish1986
  • flyfish1986
  • 2017年07月22日 11:44
  • 684
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:南京学思XSuperNest使用addHeaderView注意事项
举报原因:
原因补充:

(最多只允许输入30个字)