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

PinterestLikeAdapterView控件github  点击下载

StaggeredGridView控件github  点击下载

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

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

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

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

源码如下:

if (!loadlock) {
mLoadListener.onLoadmore();
loadlock = true;
}

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

4.进行解决

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

    public void hideFooterView(){
if(mFooterView.getVisibility()==View.VISIBLE){
StaggeredGridView.LayoutParams lp = new StaggeredGridView.LayoutParams(0);
mFooterView.setLayoutParams(lp);
mFooterView.setVisibility(View.GONE);
}
} public void showFooterView(){
if(mFooterView.getVisibility()==View.GONE)
mFooterView.setVisibility(View.VISIBLE);
StaggeredGridView.LayoutParams lp = new StaggeredGridView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT);
lp.span = Integer.MAX_VALUE;
mFooterView.setLayoutParams(lp);
loadlock=false;
}

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

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

效果图如下:

点击下载源码

瀑布流StaggeredGridView 下拉刷新的更多相关文章

  1. Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)

    转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉载入,网上的Demo太多太多了,这 ...

  2. RecyclerView实例-实现可下拉刷新上拉加载更多并可切换线性流和瀑布流模式(1)

    摘要 最近项目有个列表页需要实现线性列表和瀑布流展示的切换,首先我想到的就是上 [RecyclerView],他本身已经很好的提供了三种布局方式,只是简单做个切换应该是很简单的事情,如果要用Recyc ...

  3. 实现RecyclerView下拉刷新和上拉加载更多以及RecyclerView线性、网格、瀑布流效果演示

    实现RecyclerView下拉刷新和上拉加载更多以及RecyclerView线性.网格.瀑布流效果演示 效果预览 实例APP 小米应用商店 使用方法 build.gradle文件 dependenc ...

  4. vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多

    一.思路分析和效果图 用vue来实现一个瀑布流效果,加载网络图片,同时有下拉刷新和上拉加载更多功能效果.然后针对这几个效果的实现,捋下思路: 根据加载数据的顺序,依次追加标签展示效果: 选择哪种方式实 ...

  5. Android StaggeredGrid 加下拉刷新功能 PullToRefresh

    https://github.com/etsy/AndroidStaggeredGrid  用的github上面提供瀑布流,继承于abslistview,回收机制不错,并且提供了OnScrollLis ...

  6. iscroll.js 下拉刷新和上拉加载

    html代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  7. Android智能下拉刷新加载框架—看这些就够了

    一些值得学习的几个下拉刷新上拉加载开源库 Android智能下拉刷新框架-SmartRefreshLayout 支持所有的 View(AbsListView.RecyclerView.WebView. ...

  8. Android几种强大的下拉刷新库

    BeautifulRefreshLayout 众多优秀的下拉刷新(除了我写的之外T_T) 说起下拉刷新,好像经历一段历史的洗礼... (1)在我刚学android的时候,用的是XListView,在g ...

  9. 带头尾和动画的下拉刷新RecyclerView

    项目地址:https://github.com/shichaohui/AnimRefreshRecyclerView 项目中包括一个demo(普通Androidproject)和Android Lib ...

随机推荐

  1. Linux Shell 截取字符串

    Linux Shell 截取字符串 shell中截取字符串的方法很多 ${var#*/} ${var##*/} ${var%/*} ${var%%/*} ${var:start:len} ${var: ...

  2. linux工具

    sudo yum install yum-utils

  3. Web前端面试之HTML

    1. 对WEB标准以及W3C的理解与认识 web标准规范要求,书写标签闭合.小写.不乱嵌套,可提高搜索机器人对网页内容的搜索几率.--- SEO 使用外链css和js脚本,结构与行为.结构与表现分离, ...

  4. Spring4 实例

    结构目录如下: 其中: dao层和entity层都属于hibernate的的管辖.entity层里面装的是每张表对应的持久化类.dao层里面装的是"底层操作数据库的行为",仅仅只是 ...

  5. Daily Scrum02 12.17

    软件发布到了最后的阶段,大家都在抓紧时间DEBUG,美化界面,做各种测试…… 大家抓紧最后一把劲,一起努力冲最后一下,努力吧! Member 任务进度 下一步工作 吴文会 会议组织 会议总结,发表博客 ...

  6. C++ 小知识积累

    (1)setw和setfill函数 #include<iomanip> 代码: #include<iostream> #include<iomanip> using ...

  7. 四、jquery中的事件与应用

    当用户浏览页面时,浏览器会对页面代码进行解释或编译--这个过程实质上是通过时间来驱动的,即页面在加载时,执行一个Load事件,在这个事件中实现浏览器编译页面代码的过程.时间无论在页面元素本身还是在元素 ...

  8. 360急速浏览器BUG,POST表单提交参数丢失

    p{text-indent:2em;} --> 今天我在做支付宝充值的时候发现在360急速浏览器下面业务处理页面获取Request.Form参数为空,一开始我还以为是自己参数没有传递过去.然后就 ...

  9. Comparing the MSTest and Nunit Frameworks

    I haven't seen much information online comparing the similarities and differences between the Nunit ...

  10. 解决word2013图片不能替换

    有时我们下好文档时,想要替换里面的图片,右键时却发现没有替换图片这个选项 这是应为此时我们的文档处于兼容模式,我们可以把它另存为.docx格式,这是再右键便可发现,多了一个替换图片选项.