瀑布流StaggeredGridView 下拉刷新

简介:

1.项目中用到了瀑布流,之前用的是PinterestLikeAdapterView这个控件  然后上拉加载更多跟下拉刷新用的是XListView ,但是加载更多或者下拉刷新的时候闪屏,对用户体验很不好,      于是又从网上找了一些demo,最后决定用StaggeredGridView控件


PinterestLikeAdapterView控件github  点击下载

StaggeredGridView控件github  点击下载

我参考的是StaggeredGridView+PullToRefresh实现的:点击下载


2.问题:下载下来集成到项目中,发现上拉刷新的时候,没有更新数据,调用刷新完成方法,底部没有隐藏,并且继续加载更多不会调用加载更多监听函数。


3.任何问题出现都是由原因的,跟踪源码,发现问题所在。

1).在StaggeredGridViewtrackMotionScroll方法中有对某个boolean类型值进行判断,发现loadlock为false的时候,加载更多函数才会调用。

源码如下:

  1. if (!loadlock) {  
  2.                         mLoadListener.onLoadmore();  
  3.                         loadlock = true;  
  4.                     }  



2).在更新适配器的时候会判断是否有更新数据,有更新数据loadlock才会设置成false.否则一直是true,会导致一直调用不了。代码在StaggeredGridView类中内部类AdapterDataSetObserver类的onChanged方法中,代码太多我就不贴出来了。


4.进行解决

1).在StaggeredGridView类中增加了两个方法,隐藏底部跟现实底部

  1.   public void hideFooterView(){  
  2.         if(mFooterView.getVisibility()==View.VISIBLE){  
  3.             StaggeredGridView.LayoutParams lp = new StaggeredGridView.LayoutParams(0);  
  4.             mFooterView.setLayoutParams(lp);  
  5.             mFooterView.setVisibility(View.GONE);  
  6.         }  
  7.   }  
  8.     
  9.   public void showFooterView(){  
  10. if(mFooterView.getVisibility()==View.GONE)  
  11.     mFooterView.setVisibility(View.VISIBLE);  
  12.       StaggeredGridView.LayoutParams lp = new StaggeredGridView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT);  
  13.       lp.span = Integer.MAX_VALUE;  
  14.       mFooterView.setLayoutParams(lp);  
  15. oadlock=false;  
  16.   }  



2).加载更多或者下拉刷新的时候判断是否是最后一页,最后一页的话隐藏底部   否则显示底部

  1. if(page==3){//假如第三页是最后一页,隐藏下拉刷新  
  2.        ptrstgv.getRefreshableView().hideFooterView();  
  3.     }else{  
  4.        mAdapter.getMoreItem();  
  5.        mAdapter.notifyDataSetChanged();  
  6.                    
  7.        ptrstgv.getRefreshableView().showFooterView();  
  8.                   
  9.        page++;  
  10.      }  



效果图如下:




点击下载源码

目录
相关文章
|
JavaScript
使用原生js实现上拉加载,下拉刷新
使用原生js实现上拉加载,下拉刷新
166 0
|
1月前
简单瀑布流
简单瀑布流
23 0
|
6月前
|
JavaScript
原生js如何实现上拉加载下拉刷新?
原生js如何实现上拉加载下拉刷新?
41 0
|
JavaScript Linux
【unapp】上拉加载,下拉刷新
【unapp】上拉加载,下拉刷新
105 0
|
小程序
小程序-uniApp:区域滚动、下拉刷新、上拉加载更多
小程序-uniApp:区域滚动、下拉刷新、上拉加载更多
929 0
|
JavaScript
原生js实现上滑加载,下拉刷新
这是手机端常见的一个功能,可能很多人都是用框架或者插件实现。 这里,我试着用原生js实现。 这样能更明白原理与底层实现
287 0
原生js实现上滑加载,下拉刷新
|
容器
利用CustomScrollView实现更有趣的滑动效果
本篇介绍了 CustomScrollView 的基本用法以及 SliverAppBar 的使用,通过 SliverAppBar 可以让导航栏的滑动更有趣。
817 0
利用CustomScrollView实现更有趣的滑动效果
|
数据安全/隐私保护
瀑布流的实现
瀑布流的实现
185 0
瀑布流的实现