android listview addHeaderView和addFooterView的注意事项

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

[java] view plaincopy

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

[java] view plaincopy

  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方法中:

[java] view plaincopy

  1. public void onItemClick(AdapterView

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

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

时间: 2024-10-13 11:49:44

android listview addHeaderView和addFooterView的注意事项的相关文章

Android listview addHeaderView 和 addFooterView 详解

addHeaderView()方法:主要是向listView的头部添加布局 addFooterView()方法:主要是向listView的底部添加布局 需要注意的是添加布局的时候应该添加从父容器开始添加,而不能直接添加父容器中的子控件.例如:从一个xml布局文件中添加一个button控件, 只能将整个布局xml文件添加进去.而不能单单只添加button控件. 当添加头部和底部布局还有另外一个重载方法就是addHeaderView(headView, null, false) 和addFooter

Android Listview addHeaderView setadapter的时候莫名NullPointerException 解决

解决  Android Listview addHeaderView setadapter的时候莫名NullPointerException 改代码的时候碰到的bug Bug 1: E/AndroidRuntime(15920): java.lang.RuntimeException: Unable to start activity ComponentInfo{ }: android.view.InflateException: Binary XML file line #35: Error

ListView addHeaderView()、addFooterView()和变更列表

addHeaderView().addFooterView() addHeaderView()和addFooterView()是用于在给ListView设置Adapter之前在列表中添加或删除一些元素. 主要有以下几点注意事项: 两个方法必须在setAdapter()之前调用.如果之前调用过addHeaderView()或addFooterView(),在setAdapter(A)时,真正设置的是另一个adapter B,把之前预添加的元素和A中的元素统一由B来管理. 多次调用addHeader

android重写listview使用addHeaderView和addFooterView注意事项

1.添加addHeaderView或addFooterView 对listview添加headerView或footerView时,可以选择addHeaderView(headView)或addHeaderView(headView, null, false),注意后者第三个参数boolean isSelectable,对于listview中设置onItemClick事件,需要将isSelectable设为false,从而保证点击APP出现异常 2.Item中包含按钮或点击控件 如果listvi

android ListView注意事项

所有问题,都是自己遇到过的. 但内容,有一半是自己写的,也有一半是复制过来. 所以,写成原创还请原谅 1. ListView添加标题后(addHeader())后,使用listView.getAdapter获取的对像是被Header封装后的HeaderViewListAdapter对像.所以,为了获取自定义Adapter,方法为: HeaderViewListAdapter adapter=(HeaderViewListAdapter)dayBillListView.getAdapter();

android ListView使用注意事项

总结本人在使用android Listview时遇到的一些应该注意的事项: 1.想要将listview item项里的子控件的点击事件交给item来处理,需要两步: (1)重写子控件的onTouchEvent方法 @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub return false; } (2)在item的xml文件中的根布局加上一句: android:

Using lists in Android (ListView) - Tutorial

Lars Vogel Version 4.6 Copyright © 2010, 2011, 2012, 2013, 2014 vogella GmbH 20.11.2014 Using Android ListView, ListActivity and ListFragment This tutorial describes how to use the ListView view together with Activities and Fragments in Android. The

Android——ListView布局+适配器(三)

Android--ListView布局+适配器(三) package com.example.administrator.newstop; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import andro

【转】Android android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片)

首先我们还是看一些示例:(网易,新浪,百度)      下面我简单的介绍下实现方法:其实就是listview addHeaderView.只不过这个view是一个可以切换图片的view,至于这个view怎么做,就要根据自己的喜爱了,实现有多种方法,下面我简单介绍一下. 第一种:ViewFlipper+GestureDetector 主布局就是一个listview,这里就不介绍了,我介绍下切换图片布局head_iamge.xml 1 <span style="font-size:12px;&