pullToRefresh集成SwipeMenuListview,RecyclerView

来源:互联网 发布:dota2 数据bld是什么 编辑:程序博客网 时间:2024/06/06 04:03

Andorid-PullToRefresh大家应该都非常的熟悉,是一个下拉刷新,上拉加载的控件。功能也是非常的强大,我们可以自定义各种动画。
SwipeMenuListview也是非常的常用,可以为你的listview添加侧滑菜单,功能也是很完善。
很多新人想使用侧滑和下拉刷新,上拉加载的时候会不知道怎么实现。其实把这两个控件集成一下也是很方便的。
首先我们来看看PullTorefreshListview,PullTorefreshScrollview ,PullTorefreshGridView.我们发现它们都继承了PullToRefreshBase,并且实现了getPullToRefreshScrollDirection,createRefreshableView,isReadyForPullEnd,isReadyForPullStart这四个方法。所以我们也可以自定义一个 PullToRefreshSwipeMenuListview,继承PullToRefreshBase,在getPullToRefreshScrollDirection方法中我们指定方向为竖向:

@Override    public Orientation getPullToRefreshScrollDirection() {        return Orientation.VERTICAL;    }

然后在createRefreshableView方法中:

@Override    protected SwipeMenuListView createRefreshableView(Context context, AttributeSet attrs) {        listView = new SwipeMenuListView(context, attrs);        return listView;    }

我们new出一个SwipeMenuListView对象return就ok了。
还有两个方法isReadyForPullStart和isReadyForPullEnd。我们只要判断listview是否到达顶部或者底部就可以了。

@Override    protected boolean isReadyForPullStart() {    if(listView.getAdapter() == null || listView.getAdapter().getCount()==0){            return true;        }        if (listView.getFirstVisiblePosition() == 0) {            if (listView.getChildAt(0).getTop() >= getRefreshableView().getTop()) {                return true;            }        }        return false;    }
@Override    protected boolean isReadyForPullEnd() {    if(listView.getAdapter() == null || listView.getAdapter().getCount()==0){            return true;        }        int lastPos = listView.getAdapter().getCount() - 1;        if (listView.getLastVisiblePosition() == lastPos) {            int i = listView.getAdapter().getCount() - ((SwipeMenuListView) getRefreshableView()).getChildCount();            if (listView.getChildAt(lastPos - i).getBottom() <= getRefreshableView().getBottom()) {                return true;            }        }        return false;    }

这样简单就实现了侧滑 上拉下拉兼具的控件。你也可以根据这个自定义一个可以下拉上拉的Recyclerview,Recyclerview判断顶部item和底部item是否完全显示提供了非常好的方法。不需要自己去计算。
Recyclerview.getLayoutManager 有以下两个方法。
findFirstCompletelyVisibleItemPosition和findLastCompletelyVisibleItemPosition。
ps:欢迎加我的新手群:android入门学习 145186993。

0 0