pullToRefresh集成SwipeMenuListview,RecyclerView

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。

你可能感兴趣的:(android,集成,下拉,侧滑)