妹子图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
原创粉丝点击