`

android listview addHeaderView和addFooterView的注意事项

 
阅读更多

1、 item内如果有button等控件时,在监听listview的onitemclick事件时,焦点会被item内的button、 imagebutton等控件抢走,从而导致在listview设置了onitemclick事件后不会被触发。解决方法是在初始化item的时候屏蔽掉 其内部button等控件的焦点获取,具体方法可以在自定义item的根控件中调用:

 

  1. 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的位置是一样的。

 

  1. @Override  
  2. public View getView(int position, View convertView, ViewGroup parent) {  
  3. // TODO Auto-generated method stub  
  4. Log.i("adapter", "position:"+position);   //这个position就是我们数据的真实位置  
  5.   }  

而listview的onitemclick方法中:

 

  1. public void onItemClick(AdapterView

headView和footerView都可以响应onItemClick方法,headView的position为0, footerView的position最大。

不过可以给headView和footerView设置OnClickListener来覆盖OnItemClick,这样,你点击headview或者footerView将触发OnClickListener而不是onItemClick().

分享到:
评论

相关推荐

    安卓的RecyclerView的addHeaderView和addFooterView

    本篇将详细介绍RecyclerView中的`addHeaderView`和`addFooterView`方法,以及如何在实际项目中应用这两个方法。 1. RecyclerView的基础 RecyclerView通过ViewHolder模式提高了性能,通过Adapter来管理数据与视图...

    HeaderViewAdapter:HeaderViewAdapter可以对已有的RecyclerView.Adapter进行包装,使其具备给列表添加头部和添加尾部的功能。就相当于给RecyclerView扩展了类似ListView的addHeaderView和addFooterView的功能

    就相当给RecyclerView扩展了类似ListView的addHeaderView和addFooterView的功能。效果图1、引入依赖在Project的build.gradle在添加以下代码allprojects {repositories {...maven { url 'https://jitpack.io' }}}在...

    Android listView学习源码.zip

    7. 头部和尾部:通过`addHeaderView()`和`addFooterView()`方法,可以在ListView的头部和尾部添加额外的视图,如搜索栏或加载提示。 8. 分割线:通过设置`setDivider()`和`setDividerHeight()`,可以定制ListView的...

    android ListView简单示例

    通过`addHeaderView()`和`addFooterView()`方法实现。 6. **分隔符(Divider)** - 可以通过设置`setDivider()`和`setDividerHeight()`方法为ListView添加行间的分隔线。 7. **复选框和选择模式** - 若需在...

    Android ListView实现各种版面设计功能 源码

    5. **Header与Footer的添加**:有时我们希望在ListView的顶部或底部添加额外的信息,这可以通过调用`addHeaderView()`和`addFooterView()`方法实现。这些视图不会被Adapter的数据迭代,它们始终固定在ListView的开头...

    Android ListView详细demo源码

    使用`addHeaderView()`和`addFooterView()`方法可以向ListView的头部或尾部添加额外的视图,常用于显示加载提示或广告。 8. **下拉刷新和上拉加载** 对于更复杂的需求,如下拉刷新和上拉加载,可以使用...

    Android中ListView表头表尾

    在ListView中插入表头和表尾,可以使用`addHeaderView()`和`addFooterView()`方法。这两个方法接受一个View作为参数,这个View可以是任意布局,可以包含多个组件。 示例代码如下: ```java View headerView = ...

    Android ListView使用技巧

    使用`addHeaderView()`和`addFooterView()`方法即可添加。 8. **优化滑动性能** 对于包含复杂布局的item,可以使用`setCacheColorHint()`设置背景色,减少重绘次数。另外,开启`setSmoothScrollbarEnabled(true)`...

    Android ListView实例代码

    - 使用`addHeaderView(View view)`和`addFooterView(View view)`方法可以向ListView的头部和尾部添加视图,常用于显示搜索框或者加载更多按钮。 6. **ListView与Adapter的数据绑定** - 当数据源发生变化时,需要...

    android ListView实现显示微信好友列表

    - **Header和Footer**:如果需要在列表顶部或底部添加额外的视图,可以使用addHeaderView和addFooterView方法。 - **滚动动画**:可以添加滚动监听,实现滚动时的平滑过渡效果。 综上所述,实现"android ListView...

    Android Listview表格

    6. **头部和尾部**:可以通过addHeaderView和addFooterView方法添加固定在顶部和底部的视图,模拟表格的表头和表尾。 7. **选择和排序**:如果需要支持多选,可以使用ChoiceMode属性设置为MULTIPLE_CHOICE或...

    android listview自定义控件例子

    3. **头部和尾部视图**:使用`addHeaderView()`和`addFooterView()`方法添加额外的视图。 4. **下拉刷新和上拉加载更多**:可以集成第三方库如SwipeRefreshLayout和LoadMoreListView来实现这些功能。 5. **动画...

    android listview 自定义样式实例

    - 如果需要在ListView的顶部或底部添加额外的视图,如头部广告或页脚提示,可以使用`addHeaderView()`和`addFooterView()`方法。 10. **分组ListView(ExpandableListView)**: - 如果需要更复杂的数据结构,...

    安卓listview相关相关-android ListView实现显示微信好友列表.rar

    - 如果需要在列表顶部或底部添加额外的视图,如搜索栏或广告,可以使用addHeaderView和addFooterView方法。 8. **ListView的优化**: - 缓存convertView复用,避免重复创建视图对象。 - 使用AsyncTask或其他异步...

    listview的头部尾部布局

    调用ListView的addHeaderView和addFooterView方法即可: ```java listView.addHeaderView(headerView); listView.addFooterView(footerView); ``` 这些方法会在ListView的数据项之前添加头部,之后添加尾部。...

    安卓android listview应用源码

    在Android中,我们可以通过调用`addHeaderView()`和`addFooterView()`方法实现。源码可能会展示如何动态添加和移除这些部分,并保持数据与视图的同步。 3. **Multiple Types ListView**:这种ListView可以显示多种...

    Android listview

    6. **利用addHeaderView和addFooterView**:在ListView的头部或尾部添加一个假的EditText,可以避免真实EditText在滚动时的错位问题。 7. **使用android:descendantFocusability属性**:在ListView的父布局中设置该...

    Android 自定义ListView + Gallery 组合

    4. **头部和底部视图(Header and Footer)**:通过`addHeaderView()`和`addFooterView()`方法可以添加到ListView的顶部和底部,增强界面的可定制性。 接下来,我们来看Gallery组件,它是水平滚动的列表,常用于...

    Android listView最全资料

    通过调用ListView的addHeaderView()和addFooterView()方法即可实现。 9. **点击事件处理**:为ListView的各个列表项设置点击事件监听,通常使用setOnItemClickListener()方法。对于复杂的交互,可能需要自定义...

    listview源码

    - 自定义Header和Footer:直接调用ListView的addHeaderView和addFooterView方法添加。 5. **ListView与数据源的绑定** - 使用ArrayAdapter、CursorAdapter或BaseAdapter将数据绑定到ListView。ArrayAdapter适用于...

Global site tag (gtag.js) - Google Analytics