android footerView 的使用
引用:http://hi.baidu.com/guoxiaoming/item/b60b7c8132602f5d26ebd9cd
应用场景:
是一个ListView分页加载的情况,用户滚动到最底部的时候,添加FooterView,提示用户正在加载,然后加载完毕后移除FooterView.
但是遇到了以下问题,在执行removeFooterView后,造成了ListView的OnItemClick事件无效.
----------------------------
先看一下以前的代码(错误代码):
给ListView添加OnScrollListener
public void onScrollStateChanged(AbsListView view, int scrollState) {
/**
* 当ListView滑动到最后一条记录时这时,我们会看到已经被添加到ListView的"加载项"布局, 这时应该加载剩余数据。
*/
if (mLastItem >= mBulletinAdapter.getCount()-1
&& scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
if (mBulletinAdapter.getCount() <= mLastItem) {
if(mAnnouncementLv.getFooterViewsCount()==0){//如果没有显示加载中
mAnnouncementLv.addFooterView(mLoadLayout);//显示加载中
}
queryFromWeb(mSelectPurchaseItem);//加载数据
}
}
}
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
mLastItem = firstVisibleItem + visibleItemCount; //用于标识是否可以显示添加的框
if (totalItemCount > mLastItem+1 && totalItemCount>0) {
if(mAnnouncementLv.getFooterViewsCount()>0){
mAnnouncementLv.removeFooterView(mLoadLayout); //去除掉
}
}
}
在这个界面中,总是在执行removeFooterView后,OnItemSelect事件不能响应,但是还可以滚动,OnScroll事件还可以触发.
当再执行一次Add和Remove操作的时候.OnItemSelect事件就可以触发了.
--------------------------------
经多方搜索,查证. 可能这个问题是Google的一个Bug.在OnScroll里执行Remove操作可能会造成页面假死.
我的解决方案如下:
每次Remove是在加载完数据之后,那么就在queryFromWeb(XXCX)的方法中remove就可以了.
修改后代码如下:
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
mLastItem = firstVisibleItem + visibleItemCount; //只留一个标识--当前显示的最后一条数据
}
在queryFromWeb,加载完List后,执行以下方法:
mBulletinList.addAll(bulletinList.getInfoList());//添加数据
mBulletinAdapter.notifyDataSetChanged();//通知变化
if(mAnnouncementLv.getFooterViewsCount()>0){//去掉Footer
mAnnouncementLv.removeFooterView(mLoadLayout);
}
-------------------------------------
经验证:以上方法完全符合要求.