zoukankan      html  css  js  c++  java
  • 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);     

    }

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

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

  • 相关阅读:
    爬取诗词名句网数据并做简单数据分析
    python3 协程Unclosed client session client_session: <aiohttp.client.ClientSession object at 0x0918BAC0>
    scrapy框架中多个spider,tiems,pipelines的使用及运行方法
    python爬虫模拟登录的图片验证码处理和会话维持
    python使用selenium驱动chromium防止浏览器自动升级失效!
    爬虫篇-博客园搜索爬取
    复合索引,不走索引情况
    去掉Oracle连接超时限制
    C# 正则表达式
    Clean Code
  • 原文地址:https://www.cnblogs.com/sode/p/2606479.html
Copyright © 2011-2022 走看看