android footerView 的使用

简介: 引用:http://hi.baidu.com/guoxiaoming/item/b60b7c8132602f5d26ebd9cd 应用场景:    是一个ListView分页加载的情况,用户滚动到最底部的时候,添加FooterView,提示用户正在加载,然后加载完毕后移除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);     

}

-------------------------------------

经验证:以上方法完全符合要求.

相关文章
DHL
|
Linux
为数不多的人知道的AndroidStudio快捷键(二)
为数不多的人知道的AndroidStudio快捷键(二)
DHL
91 0
为数不多的人知道的AndroidStudio快捷键(二)
|
算法 Android开发
Android的路接下来该怎么走?
其实想写这篇文章好久了,很多小伙伴们也经常在群里探讨android移动开发者的走向,一部分人都想多快好省,间歇性踌躇满志、持续性混吃等死 ,只想用CV的开发模式们快速完成工作,然后回家王者农药。其实这种现象很普遍,我想告诉你的是 ,只要你走对方向,不断地学习,android的春天依然是健在的。
8827 0
|
Android开发
Android 多进程通信之几个基本问题
开启多进程的方法 Android 中使用多进程只有一种方法,那就是给四大组件(Activity、Service、Receiver、ContentProvider)在AndroidMenifest中指定android:process属性 <service android:name="com.
2438 0
|
Android开发 数据格式 XML
|
Android开发 Java 数据格式
|
Android开发
Android BGABadgeView:BGABadgeImageView以及BGABadgeRelativeLayout(4)
 Android BGABadgeView:BGABadgeImageView以及BGABadgeRelativeLayout(4) 在附录文章5,6,7的基础上,写一个小例子说明BGABadgeImageView以及BGABadgeRelativeLayout。
1108 0
|
API Apache Android开发
Android 6.0 Changes
Android 6.0 变化   Android 6.0 Changes In this document 运行时权限Runtime Permissions Doze and App Standby 阿帕奇 HTTPClient 移除 Apache HTTP Client Remov...
1259 0