瀑布流StaggeredGridView 下拉刷新
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 下拉刷新的更多相关文章
- Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)
转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉载入,网上的Demo太多太多了,这 ...
- RecyclerView实例-实现可下拉刷新上拉加载更多并可切换线性流和瀑布流模式(1)
摘要 最近项目有个列表页需要实现线性列表和瀑布流展示的切换,首先我想到的就是上 [RecyclerView],他本身已经很好的提供了三种布局方式,只是简单做个切换应该是很简单的事情,如果要用Recyc ...
- 实现RecyclerView下拉刷新和上拉加载更多以及RecyclerView线性、网格、瀑布流效果演示
实现RecyclerView下拉刷新和上拉加载更多以及RecyclerView线性.网格.瀑布流效果演示 效果预览 实例APP 小米应用商店 使用方法 build.gradle文件 dependenc ...
- vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多
一.思路分析和效果图 用vue来实现一个瀑布流效果,加载网络图片,同时有下拉刷新和上拉加载更多功能效果.然后针对这几个效果的实现,捋下思路: 根据加载数据的顺序,依次追加标签展示效果: 选择哪种方式实 ...
- Android StaggeredGrid 加下拉刷新功能 PullToRefresh
https://github.com/etsy/AndroidStaggeredGrid 用的github上面提供瀑布流,继承于abslistview,回收机制不错,并且提供了OnScrollLis ...
- iscroll.js 下拉刷新和上拉加载
html代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- Android智能下拉刷新加载框架—看这些就够了
一些值得学习的几个下拉刷新上拉加载开源库 Android智能下拉刷新框架-SmartRefreshLayout 支持所有的 View(AbsListView.RecyclerView.WebView. ...
- Android几种强大的下拉刷新库
BeautifulRefreshLayout 众多优秀的下拉刷新(除了我写的之外T_T) 说起下拉刷新,好像经历一段历史的洗礼... (1)在我刚学android的时候,用的是XListView,在g ...
- 带头尾和动画的下拉刷新RecyclerView
项目地址:https://github.com/shichaohui/AnimRefreshRecyclerView 项目中包括一个demo(普通Androidproject)和Android Lib ...
随机推荐
- 初步了解CPU
了解CPU By JackKing_defier 首先说明一下,本文内容主要是简单说明CPU的大致原理,所需要的前提知识我会提出,但是由于篇幅我不会再详细讲解需要的其他基础知识.默认学过工科基础课. ...
- 使用神经网络来识别手写数字【译】(三)- 用Python代码实现
实现我们分类数字的网络 好,让我们使用随机梯度下降和 MNIST训练数据来写一个程序来学习怎样识别手写数字. 我们用Python (2.7) 来实现.只有 74 行代码!我们需要的第一个东西是 MNI ...
- 分布式系统:怎么简单地解释Paxos算法?从二段提交、三段提交讲到Paxos
原文:https://www.quora.com/Distributed-Systems/What-is-a-simple-explanation-of-the-Paxos-algorithm 作者: ...
- 扩展BindingList,防止增加、删除项时自动更新界面而不出现“跨线程操作界面控件 corss thread operation”异常
在做界面程序时,常常需要一些数据类,界面元素通过绑定等方式显示出数据,然而由于UI线程不是线程安全的,一般都需要通过Invoke等方式来调用界面控件.但对于数据绑定bindingList而言,没法响应 ...
- css技巧
1.实现position为fixed与absolute值时居中定位: 给需要定位的元素块外加一层div盒子,外层div盒子存在于文档流中,让外层div盒子居中定位并设置position属性为relat ...
- DSY2933*地图
Description 一个人口统计办公室要绘制一张地图.由于技术的原因只能使用少量的颜色.两个有相同或相近人口的区域在地图应用相同的颜色.例如一种颜色k,则A(k) 是相应的数,则有: 在用颜色 ...
- initWithCoder与initWithFrame的区别
1. initWithFrame方法是什么? initWithFrame方法用来初始化并返回一个新的视图对象,根据指定的CGRect(尺寸). 当然,其他UI对象,也有initWithFrame方 ...
- 启动项目的时候报驱动错误: not support oracle driver 1.0
问题:今天在使用pom导入oracle14的包时候发现怎么都下载不过来.网上查了一下发现是因为Oracle驱动需要官方授权,所以在pom.xml文件直接配置,无法下载成功. 解决方法就是下载oracl ...
- poj3122-Pie(二分法+贪心思想)
一,题意: 有f+1个人(包括自己),n块披萨pie,给你每块pie的半径,要你公平的把尽可能多的pie分给每一个人 而且每个人得到的pie来自一个pie,不能拼凑,多余的边角丢掉.二,思路: 1,输 ...
- html5学习笔记一
HTML5学习笔记 <video>标记:定义视频,Ogg.MPEG4.WebM三种格式 <video src=”movie.ogg” controls=”controls”> ...