瀑布流StaggeredGridView 下拉刷新

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


PinterestLikeAdapterView控件github  点击下载

StaggeredGridView控件github  点击下载

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


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


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

1).在StaggeredGridViewtrackMotionScroll方法中有对某个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++;
	 }



效果图如下:




点击下载源码



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值