项目迭代需要更换下拉刷新和上滑加载更多的效果,就研究了一下安卓自带的刷新的控件SwipeRefreshLayout,挺好用的效果也不错,先上图:
我用的是swiperefreshlayout配合recyclerview做的,还是一样先看xml文件,写法和pulltorefresh一样,包裹起来:
<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/sf_swiperefresh" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@android:id/list" /> </android.support.v4.widget.SwipeRefreshLayout>然后代码中findviewbyid拿到控件,
mSwiperefresh = (SwipeRefreshLayout) scanView.findViewById(R.id.sf_swiperefresh); mRecyclerView = (RecyclerView) scanView.findViewById(android.R.id.list);
如上代码拿到mSwiperefresh之后,首先设置其展示的小圈圈颜色,最多设置4种,第一个是最先展示的颜色,第一圈转完数据还没加载出来就会显示第二种颜色,等等mSwiperefresh.setColorSchemeResources(android.R.color.holo_blue_light,android.R.color.holo_red_light,android.R.color.holo_orange_light,android.R.color.holo_green_light);mSwiperefresh.setProgressViewOffset(true, 0, 100);//设置加载圈是否有缩放效果,后两个参数是展示的位置y轴坐标
下来就是设置下拉刷新和上滑加载先看代码:
/** * 刷新以及加载更多 */ private void refreshData() { //下拉刷新 mSwiperefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { getDataFromServer(); } }); //上滑加载更多 mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (adapter!=null){ if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 == adapter.getItemCount()) { //访问网络加载下一页数据 if (mNewsBean != null) { if (mNewsBean.data.has_more == 0) { //没数据了 Toast.makeText(getActivity(), "没有更多数据", Toast.LENGTH_SHORT).show(); mSwiperefresh.setRefreshing(false); } else { //加载下一页数据 //拼接url isLoading = true; page = mNewsBean.data.page + 1; getDataFromServer(); } } } } }上面代码中设置下拉刷新有个监听方法:setOnRefreshListener(),在这个方法里面可以刷新数据,至于上滑加载更多是根据recyclerView的滑动监听判断是不是最后一个条目,是的话就去请求网络加载下一页数据,具体做法如上代码。
注意:其中我们刷新完后会有个隐藏和显示刷新布局的操作:mSwriperefresh.setRefreshing(true);true就是展示,false就是隐藏。
好了,以上就是简单实用 SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉加载更多的操作。