妹子图APP(二)—— SwipeRefreshLayout实现下拉刷新上拉加载
来源:互联网 发布:网络故障诊断工具 编辑:程序博客网 时间:2024/05/17 04:56
接上文:妹子图APP(一)—— Retrofit+Glide加载网络图片
前面实现了图片加载,但只显示了20张图片,现在需要实现上拉刷新和下拉加载
布局使用 SwipeRefreshLayout+RecyclerView实现,直接使用SwipeRefreshLayout包裹RecyclerView即可
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/refreshlayout" tools:context="com.example.girlimage.activity.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"/></android.support.v4.widget.SwipeRefreshLayout>
SwipeRefreshLayout 是谷歌公司推出的用于下拉刷新的控件,在Version 19.1之后SwipeRefreshLayout 被放到support v4中。
前面添加Glide 依赖时已经添加了v4包
compile 'com.android.support:support-v4:25.3.0'
1.下拉刷新
首先在MainActivity中找到SwipeRefreshLayout 设置属性并设置监听事件
//找到SwipeRefreshLayout mRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.refreshlayout); //设置刷新进度条的颜色 mRefreshLayout.setColorSchemeResources( android.R.color.holo_red_dark, android.R.color.holo_blue_dark, android.R.color.holo_green_light, android.R.color.holo_orange_light ); //设置刷新监听事件下拉刷新 mRefreshLayout.setOnRefreshListener(this);
监听事件采用MainActivity实现OnRefreshListener接口然后重写方法,在重写方法中请求网络获得数据,通知Recyclerview改变
//下拉刷新 @Override public void onRefresh() { new Handler().postDelayed(new Runnable() { @Override public void run() { //定义一个新集合 //调用getGirlList方法重新请求数据 mRequest.getGirlList(new RequsetCallback<GirlsBean>() { @Override public void onFinish(GirlsBean data) { //适配器中写的方法,添加数据,并通知RecyclerView改变UI mAdapter.addData(data.getShowapi_res_body().getNewslist()); } @Override public void onError(String msg) { //吐司错误信息 Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT).show(); } },page); //结束刷新进度条的旋转 mRefreshLayout.setRefreshing(false); } },2000); }
Adapter.addData 是我在适配器类中添加的方法
//添加数据 用于下拉刷新 public void addData(List<GirlsBean.ShowapiResBodyBean.NewslistBean> newDatas) { //向一个新的集合,添加以前所有的数据 newDatas.addAll(mList); //以前集合的数据全部移除 mList.removeAll(mList); //添加最新的集合里的数据 mList.addAll(newDatas); //数据改变,通知RecyclerView改变视图 notifyDataSetChanged(); }
2.上拉加载
采用RecyclerView设置滚动事件监听实现,判断如果是最后一个item则请求网络,更新数据,通知Recyclerview改变View
//上拉加载 mRecyclerView设置滚动事件监听 mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); //判断RecyclerView的状态 是空闲时,同时,是最后一个可见的item时才加载 if (newState == RecyclerView.SCROLL_STATE_IDLE && //mAdapter.getItemCount()通过适配器得到当前Item的数量 lastVisibleItem + 1 == mAdapter.getItemCount()) { Toast.makeText(MainActivity.this,"正在加载...",Toast.LENGTH_SHORT).show(); new Handler().postDelayed(new Runnable() { @Override public void run() { //和下拉刷新时类似 page++; //调用getGirlList方法重新请求数据 mRequest.getGirlList(new RequsetCallback<GirlsBean>() { @Override public void onFinish(GirlsBean data) { //适配器中写的方法,添加数据,并通知RecyclerView改变UI mAdapter.addMoreItem(data.getShowapi_res_body().getNewslist()); } @Override public void onError(String msg) { //吐司错误信息 Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT).show(); } },page); } },2000); } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); //最后一个可见的item lastVisibleItem = mGridLayoutManager.findLastVisibleItemPosition(); } });
Adapter.addMoreItem为我在适配器类中添加的方法
//用于上拉加载 public void addMoreItem(List<GirlsBean.ShowapiResBodyBean.NewslistBean> newDatas) { mList.addAll(newDatas); notifyDataSetChanged(); }
详细代码:https://github.com/897532167/LoadNetworkPicture
如有兴趣可看:妹子图APP(三)—— RecyclerView的Item点击事件和图片保存至本地
暂时的效果如图
0 0
- 妹子图APP(二)—— SwipeRefreshLayout实现下拉刷新上拉加载
- Android SwipeRefreshLayout实现下拉刷新,上拉加载、滑动加载(自动加载)和点击加载
- SwipeRefreshLayout实现下拉刷新、上拉加载更多功能
- 使用SwipeRefreshLayout实现下拉刷新与上拉加载更多
- SwipeRefreshLayout+ListView实现下拉刷新自定义上拉加载
- SwipeRefreshLayout+RecyclerView实现下拉刷新上拉自动加载
- SwipeRefreshLayout + RecyclerView实现上拉加载和下拉刷新
- recyclerview+swiperefreshlayout实现GridView下拉刷新,上拉加载更多
- SwipeRefreshLayout+RecyclerView实现下拉刷新上拉自动加载
- android SwipeRefreshLayout 实现 下拉刷新 上拉加载
- SwipeRefreshLayout配合RecyclerView实现上拉加载更多下拉刷新
- android SwipeRefreshLayout 实现 下拉刷新 上拉加载
- SwipeRefreshLayout+RecyclerView实现下拉刷新上拉加载功能
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉加载更多
- 继承SwipeRefreshLayout实现下拉刷新和上拉加载
- 使用SwipeRefreshLayout实现recycleview下拉刷新上拉加载
- 通过SwipeRefreshLayout实现ListView的上拉加载下拉刷新
- 继承自SwipeRefreshLayout实现上拉刷新下拉加载
- Bloom Filter概念和原理
- Winpython环境下mayavi配置
- 520. Detect Capital
- 令人拍案叫绝的Wasserstein GAN
- IDEA配置Tomcat
- 妹子图APP(二)—— SwipeRefreshLayout实现下拉刷新上拉加载
- 解决 Windows instance 时间不同步问题
- 编程极简入门(python)-03-第一个python程序
- POJ1860 Currency Exchange(正权环,folyd)
- Handler使用方法总结
- glitch断言
- 项目笔记:点击按钮后使其保持点击时的状态
- 模板引擎
- 操作系统是如何工作的