zoukankan      html  css  js  c++  java
  • 瀑布流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++;
    	 }



    效果图如下:




    点击下载源码



  • 相关阅读:
    css将元素float和textalign方向一致时
    Asp.Net细节性问题技巧精萃
    ajax单个元素中实现多个回调函数
    javascript实现Observer模式来管理多个事件回调
    管闲事的小明
    字符串扩展
    (转的)计算组合数——整数拆分
    数学题杭电1002A+B。。。交了七遍,五遍竟然是没删除测试时候的输出= =。。。。
    快速排序。。。注意快速排序不适宜解决有重复数据的排序
    哈希查找统计元音
  • 原文地址:https://www.cnblogs.com/yishaochu/p/5078619.html
Copyright © 2011-2022 走看看