ListView addHeaderView 对 position 的影响

1. 在 public View getView(int position, View convertView, ViewGroup parent)
position 和 是否有headerView无关,列表item的序号。

2. 在 public void onItemClick(AdapterView<?> parent, View view, int position, long id) 点击事件中
position 是算上了headerView的
要对应上 列表item的序号需要 position-=mListView.getHeaderViewsCount();

3. 比较坑的是 Adapter 的 public Object getItem(int position) 方法。
如果调用了addHeaderView,则用 mListView.getAdapter() 获取的adapter不是开始设置进去的那个adapter。
而是一个HeaderViewListAdapter,对原始Adapter进行了包装。
用这个 mListView.getAdapter().getItem(position); 时,会对position-=headerCound后,再调用原始的Adapter的getItem

public Object getItem(int position) {
        // Header (negative positions will throw an ArrayIndexOutOfBoundsException)
        int numHeaders = getHeadersCount();
        if (position < numHeaders) {
            return mHeaderViewInfos.get(position).data;
        }

        // Adapter
        final int adjPosition = position - numHeaders;
        int adapterCount = 0;
        if (mAdapter != null) {
            adapterCount = mAdapter.getCount();
            if (adjPosition < adapterCount) {
                return mAdapter.getItem(adjPosition);
            }
        }

        // Footer (off-limits positions will throw an ArrayIndexOutOfBoundsException)
        return mFooterViewInfos.get(adjPosition - adapterCount).data;
    }

ListView addHeaderView 对 position 的影响

时间: 2024-10-17 18:32:34

ListView addHeaderView 对 position 的影响的相关文章

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

android listview addHeaderView和addFooterView的注意事项

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

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

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

ListView addHeaderView

View headView = getLayoutInflater().inflate(R.layout.igame_wb_details_task_list_layout_header, mLvList, false); LinearLayout layout = (LinearLayout) headView.findViewById(R.id.wb_details_activity_rl_lol_prize_task_link); mLvList.addHeaderView(layout)

position布局影响点击事件以及冒泡获取事件目标

在编写功能时总是会出现很多意想不到的问题,现在就讲讲我遇到的两个问题,通过举一个相似的例子来解说. <1> 元素互相独立,不存在包含于被包含 选择城市的按钮,为它绑定点击事件,点击后就弹出城市列表层,城市列表层设置了position与z-index的值来进行布局,然后再点击选择城市按钮,点击事件就不起作用了,反而是城市列表层的点击事件起作用,这说明只有显示在最上面的一层绑定的事件可以起作用,即使最上面的一层没有全部盖住下面的内容,下面的内容绑定的事件也不起作用,所以要想让选择城市按钮绑定的点击

ListView的addHeaderView()方法相关问题

使用listView.addHeaderView(view) 可以在 listView 上方添加一个view视图 ,使listView和这个view连接在一起 效果上看上去是一个整体 一般用于上拉刷新下拉加载listView 1.关于addHeaderView(view)方法的多次使用 对应一个ListView对象 比如:list 每使用一次addHeaderView(view)方法 就会在list 列表对象上方添加一个view 而添加的view的排列顺序是按照添加的次序排列的, list.ad

ListView的&#160;addHeaderView

在代码中使用 listView .addHeaderView(...) 方法可以在ListView组件上方添加上其他组件,并且连结在一起像是一个新组件.如果多次使用 .addHeaderView(...) ,则最先添加的组件在最上方,按添加的先后顺序由上到下罗列. 此时listView 的 position = 0 的位置对应的是view1,而不再是原来listView中的第一条了. 若要对做原来的ListView做不可见设置,可使用将listView的adapter中数据置空的方法,在可见时再

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

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