Android中Listview设置footerView后不展示的问题原因探究
来源:互联网 发布:apache windows安装包 编辑:程序博客网 时间:2024/05/24 16:16
Android中遇到了设置footerView后不展示,并且会把最后一个view当做footerview处理的情况。
上网搜索了下,说是把addFooterView放到setAdapter之前就可以了,作为一个开发者,怎么能不知其所以然呢,所以就大略的看了下listview的源码。首先来看ListView的setAdapter源码:
if (mAdapter != null && mDataSetObserver != null) { mAdapter.unregisterDataSetObserver(mDataSetObserver);}resetList();mRecycler.clear(;if (mHeaderViewInfos.size() > 0 || mFooterViewInfos.size() > 0) { mAdapter = new HeaderViewListAdapter( mHeaderViewInfos, mFooterViewInfos, adapter);} else { mAdapter = adapter;}主要看这里if (mHeaderViewInfos.size() > 0|| mFooterViewInfos.size() > 0) { mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, adapter);这里,此时由于我用的是xlistview,就是说此时我已经有了mHeaderViewInfos,但是没有footerinfo,于是会新建一个HeaderViewListAdapter,再进去HeaderViewListAdapter里面看一下源码:
public HeaderViewListAdapter(ArrayList<ListView.FixedViewInfo> headerViewInfos, ArrayList<ListView.FixedViewInfo> footerViewInfos, ListAdapter adapter) { mAdapter = adapter; mIsFilterable = adapter instanceof Filterable; if (headerViewInfos == null) { mHeaderViewInfos = EMPTY_INFO_LIST; } else { mHeaderViewInfos = headerViewInfos; } if (footerViewInfos == null) { mFooterViewInfos = EMPTY_INFO_LIST; } else { mFooterViewInfos = footerViewInfos; } mAreAllFixedViewsSelectable = areAllListInfosSelectable(mHeaderViewInfos) && areAllListInfosSelectable(mFooterViewInfos);}从上面可以看出来如果我没有footerinfo,他会新建个空的list自己用,而不是用我传进去footerinfo,毕竟我传进去null嘛,这样就会出错的,所以选用了这种自己new个list的方式。
也就是说,如果setAdapter的时候我们有了headerInfo(xlistview自己加的),而没有footerinfo,HeaderViewListAdapter就会自己新建个Arraylist当做数据源,然后回过头来,我们再来看addFooterView:public void addFooterView(View v, Object data, boolean isSelectable) { final FixedViewInfo info = new FixedViewInfo(); info.view = v; info.data = data; info.isSelectable = isSelectable; mFooterViewInfos.add(info); mAreAllItemsSelectable &= isSelectable; // Wrap the adapter if it wasn't already wrapped. if (mAdapter != null) { if (!(mAdapter instanceof HeaderViewListAdapter)) {//此前有了mHeaderViewInfos,于是此处就不再执行了,于是mFooterViewInfos被抛弃了 mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, mAdapter); } // In the case of re-adding a footer view, or adding one later on, // we need to notify the observer. if (mDataSetObserver != null) { mDataSetObserver.onChanged(); } }}可以看到,此时如果adapter是空的话,不会做任何操作,从之前的分析看此后再调用setAdapter不会出任何问题,然后当我们再setAdapter之后调用addFooterView,此时adapter不是空,并且adapter也是HeaderViewListAdapter的实例,那么就不会对adapter做任何操作,也就是说,我们后add进去的footerview,由于之前有了headeview,ListView就不会再管了!这也是为什么我们后AddFooterView的时候不再有用的原因了。
所以综上所述,我们可以得出结论,如果一个listview想要同时拥有headerview和footerview,那么一定要在setAdapter之前都进行了设置才可以,如果仅仅设置了一个,而另一个在setAdapter之后再加的话就不会有任何作用了!而我出现这个问题的原因是,我用的XListView会在初始化的时候自动添加HeaderInfo,所以就不可以在setAdapter之后再addFooterView了。
解决方法就是,addFooterView和addHeaderView一定要在setAdapter之前调用。
同理,如果先addFooterView了,再setAdapter,那么之后再addHeaderView也会出现同样的问题。
- Android中Listview设置footerView后不展示的问题原因探究
- 问题:Listview中FooterView的几个问题
- 【问题汇总】ListView的FooterView设置可见性的问题
- Android ListView HeaderView和FooterView引出的Position问题
- Android虚拟按键遮挡Listview的FooterView问题
- ListView中adapter不展示(代码冗余度的问题)
- android RecyclerView 中添加 FooterView 和 DividerItemDecoration 后不能正确显示的问题
- 探究Android中Listview显示错乱问题
- Android 底部有FooterView的ListView页面
- Listview添加完HeaderView或者FooterView后,点击相应的view出现IndexOutOfBoundsException问题修复
- 【Android学习笔记】listview添加footerView后footerview点击事件无响应
- LIstView的HeaderView, FooterView
- ScrollView或者ListView中嵌套ViewPager,展示不出来问题。
- ScrollView或者ListView中嵌套ViewPager,展示不出来问题。
- ListView中 item footerview headerview 的布局 事件监听等问题的收集整理
- Android ListView中HeaderView和FooterView隐藏的两种方法
- Android 设置listview在scrollView中不滚动的方法
- android ListView隐藏FooterView(headerView)
- UnityShader快速上手指南(三)
- Linear Regression总结2
- Java jni 加载 so 时,出现 undefined symbol 错误
- NIO之Buffer channel
- Flume-ng禁用自动加载配置文件功能
- Android中Listview设置footerView后不展示的问题原因探究
- hybird
- VS快捷键使用总结
- matplotlib pyplot 输出eps图片打开后显示空白
- c++实现选择排序
- 在C#代码中应用Log4Net(一)简单使用Log4Net
- CGColorSpaceRef和CGGradientRef 的内存泄露
- android studio调试开发系统应用
- Middle-题目85:310. Minimum Height Trees