PullToRefresh扩展为上拉加载和下拉刷新

来源:互联网 发布:东莞淘宝美工培训班 编辑:程序博客网 时间:2024/04/28 01:43

最近使用android比较火的开源项目PullToRefresh控件,遇到一些问题,

一、怎么区分上拉和下拉

          我在网上找了很多资料:

            方法1:在PullToRefreshAdapterViewBase类中添加

                            public boolean isHeaderShown() {
                                   return getHeaderLayout().isShown();
                            }

                           public boolean isFooterShown() {
                                  return getFooterLayout().isShown();
                           }

                           两个方法,下拉的时候头部一定会显示,上拉的时候底部一定会显示,在程序里面判断哪个显示了进而实现刷新和加载!

                          这个方法是可以区分上拉下拉的,但是如果你要想修改头部和底部的文字,如”下拉刷新“和”上拉加载“,你会发现,文字要回弹的时候才改变,例如:上拉过程中应该显示”上拉加载“,但你会发现此时显示的你上一次的动作

                          所以这个方法不推荐

                          详细:/blog.csdn.net/ueryueryuery/article/details/17440465

            方法2:使用OnRefreshListener2接口:

                                            重写onPullDownToRefresh和onPullUpToRefresh方法,可以区分上拉下拉,但是有和方法一一样的问题,所以不推荐

            方法3:使用滑动监听,在onScrollStateChanged判断当前显示条目和首个显示条目的关系,如果当前显示大于首个显示条目则为上拉,反正则以

                int mLastFirstVisibleItem = 0;
                boolean mIsScrollingUp;
                @Override
                public void onScrollStateChanged(AbsListView view, int scrollState)
                {
                                                                                                      
                 if (view.getId() == mListView.getId())
                 {
                 final int currentFirstVisibleItem = mListView.getFirstVisiblePosition();
                                                                                                          
                 if (currentFirstVisibleItem > mLastFirstVisibleItem)
                 {
                    mIsUp = true;
                 }
                 else if (currentFirstVisibleItem < mLastFirstVisibleItem)
                 {
                    mIsUp = false;
                 }
                 mLastFirstVisibleItem = currentFirstVisibleItem;
                 }
                                                                                                      
                }
           参考资料:http://stackoverflow.com/questions/12114963/detecting-the-scrolling-direction-in-the-adapter-up-down/12115157#12115157

           这个方法也是早就有人写出来了,我只是搬运工而已,在使用这个方法的时候的遇到一些问题:
                     1、mLionstView没有getFirstVisiblePosition(),解决方法ListView mlistview =mListView.getRefreshableView();
                     2、ScrollStateChanged方法不执行,解决此方法ListView的高度要比所有item高度之和下才会执行此方法

           详细:http://glblong.blog.51cto.com/3058613/1312349/

二、PullToRefreshListView没有长按事件
     解决方法 :ListView mlistview =mListView.getRefreshableView();
                mlistview.setOnItemLongClickListener

0 0