瀑布流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实现上拉加载,下拉刷新
154 0
|
5月前
|
JavaScript
原生js如何实现上拉加载下拉刷新?
原生js如何实现上拉加载下拉刷新?
32 0
|
JavaScript API 开发者
uniapp滚动加载 下拉刷新
在日常开发中,滚动加载和下拉刷新是非常常见的功能,页面数据过多时,需要滚动加载优化性能,本篇技术分享博客将介绍如何在uniapp中实现滚动加载和下拉刷新。至此,我们已经成功地实现了滚动加载和下拉刷新两种常见的移动端功能。大家可以进行扩充或者留言交流!通过以上示例代码,我们可以看到uniapp提供了非常方便的API来实现这些功能,使得开发者可以更加专注于业务逻辑的实现。
202 0
|
JavaScript Linux
【unapp】上拉加载,下拉刷新
【unapp】上拉加载,下拉刷新
98 0
|
小程序
小程序-uniApp:区域滚动、下拉刷新、上拉加载更多
小程序-uniApp:区域滚动、下拉刷新、上拉加载更多
818 0
|
JavaScript
原生js实现上滑加载,下拉刷新
这是手机端常见的一个功能,可能很多人都是用框架或者插件实现。 这里,我试着用原生js实现。 这样能更明白原理与底层实现
276 0
原生js实现上滑加载,下拉刷新
|
容器
利用CustomScrollView实现更有趣的滑动效果
本篇介绍了 CustomScrollView 的基本用法以及 SliverAppBar 的使用,通过 SliverAppBar 可以让导航栏的滑动更有趣。
794 0
利用CustomScrollView实现更有趣的滑动效果
|
数据安全/隐私保护
瀑布流的实现
瀑布流的实现
179 0
瀑布流的实现
RecyclerView的下拉刷新和加载更多 动画
下拉刷新和加载更多 1、https://github.com/jianghejie/XRecyclerView 2、http://blog.csdn.net/jabony/article/details/44780187   动画 1、https://github.
1941 0