上拉刷新,下拉加载更多,实际上就是在布局中加入materialLayout的对象,然后编写这个对象的监听器,然后重写父类的方法,一个是refresh()在你里面编写上拉刷新的功能,然后refershMore()是下拉刷新的功能,在这两个方法中调用设置recyclerview,和配置Adapter,然后在加入一些switch,case用到的数据。
materialRefreshLayout的使用方法:https://github.com/android-cjj/Android-MaterialRefreshLayout
1.加入相应的dependence依赖:
dependencies {
compile 'com.cjj.materialrefeshlayout:library:1.3.0'
}
2.编写布局,它的用法和swipRefreshLayout一样,包裹着recyclerView
<com.cjj.MaterialRefreshLayout android:id="@+id/material_refresh_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="10dp" app:overlay="true" app:wave_show="true" app:wave_color="#90ffffff" app:progress_colors="@array/material_colors" app:wave_height_type="higher" > <android.support.v7.widget.RecyclerView android:id="@+id/hot_recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView> </com.cjj.MaterialRefreshLayout> </LinearLayout>
2.1编写adapter的item布局,代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/selector_list_item" android:padding="5dp" xmlns:app="http://schemas.android.com/apk/res-auto"> <!--运用frecso动态地获取网络数据--> <com.facebook.drawee.view.SimpleDraweeView android:layout_width="150dp" android:layout_height="wrap_content" android:background="@null" android:id="@+id/drawee_view" android:layout_alignParentLeft="true" app:viewAspectRatio="1" > </com.facebook.drawee.view.SimpleDraweeView> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_toRightOf="@+id/drawee_view"> <TextView android:id="@+id/text_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/black" android:textSize="20sp" android:maxLines="3" android:text="题目" /> <TextView android:id="@+id/text_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" android:textColor="@color/black" android:text="价格" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="立即购买" android:layout_gravity="right|bottom" /> </LinearLayout> </RelativeLayout>效果如下图
3.在活动中编写recyclerview和adapter的对象,动态的获取网络上的数据
4.然后就是实例化materialRefreshLayout控件,下拉刷新更多数据
步骤:
1.首先在activity中定义几个常量,用于定义各个状态
private static final int STATE_NORMAL=0; private static final int STATE_REFREH=1; private static final int STATE_MORE=2; private int state=STATE_NORMAL;
2.然后实例化materialRefreshLayout对象
rivate MaterialRefreshLayout materialRefreshLayout;
materialRefreshLayout= (MaterialRefreshLayout) view.findViewById(R.id.material_refresh_view);
3.创建materialRefreshLayout的监听事件
private void initRefreshLayout(final View view){ materialRefreshLayout.setLoadMore(true); //设置是否价值啊更多 materialRefreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() { @Override public void onRefresh(MaterialRefreshLayout materialRefreshLayout) { refreshData(view); } @Override public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) { super.onRefreshLoadMore(materialRefreshLayout); } }); }
4.然后在重载的方法中编写,刷新recyclervie的方法,实际上和一开始实例化recyclervie和adapter代码一样,只不过关闭了materialRefreshLayout控件,还有将irecyclerview的tem
锁定到第一个位置//下拉刷新控件,刷新出数据 private void refreshData(View view){ if(currPage<mhotBean.getTotalPage()){ currPage=currPage+1; state=STATE_REFREH; initData(view);} else{ currPage=mhotBean.getTotalPage(); state=STATE_REFREH; initData(view); } }
private void showData(View view){ switch (state){ case STATE_NORMAL: { Log.d("获取的Hot数据",mhotBean.getList().get(0).getImgUrl()); mrecyclerView= (RecyclerView) view.findViewById(R.id.hot_recycler_view); hotGoodsAdapter=new HotGoodsAdapter(mhotBean); mrecyclerView.setAdapter(hotGoodsAdapter); //必须写才能出现recyclorView,也可以是GirdLayoutManager,只是显示item的图形不一样 mrecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); //设置分割线 mrecyclerView.setItemAnimator(new DefaultItemAnimator()); mrecyclerView.addItemDecoration(new HomeItemDecoration()); } break; case STATE_REFREH: { mrecyclerView= (RecyclerView) view.findViewById(R.id.hot_recycler_view); hotGoodsAdapter=new HotGoodsAdapter(mhotBean); mrecyclerView.setAdapter(hotGoodsAdapter); //必须写才能出现recyclorView,也可以是GirdLayoutManager,只是显示item的图形不一样 mrecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); //设置分割线 mrecyclerView.setItemAnimator(new DefaultItemAnimator()); mrecyclerView.addItemDecoration(new HomeItemDecoration()); mrecyclerView.scrollToPosition(0); materialRefreshLayout.finishRefresh(); } }
三、上拉刷新加载更多recyclervie
/** * materialRefreshLayout的监听器 */ private void initRefreshLayout(final View view){ materialRefreshLayout.setLoadMore(true); //设置是否价值啊更多 materialRefreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() { @Override public void onRefresh(MaterialRefreshLayout materialRefreshLayout) { refreshData(view); } @Override public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) { super.onRefreshLoadMore(materialRefreshLayout); loadData(view); } }); } //下拉刷新控件,刷新出数据 private void refreshData(View view){ if(currPage<mhotBean.getTotalPage()){ currPage=currPage+1; state=STATE_REFREH; initData(view);} else{ currPage=mhotBean.getTotalPage(); state=STATE_REFREH; initData(view); Toast.makeText(getContext(),"不能加载更多",Toast.LENGTH_SHORT).show(); } } //上拉刷新控件,属性出数据 private void loadData(View view){ if(currPage>0){ currPage=currPage-1; state=STATE_MORE; initData(view); }else{ state=STATE_MORE; initData(view); Toast.makeText(getContext(),"不能加载更多",Toast.LENGTH_SHORT).show(); } } /** * 用于初始化hotFragment中的javabean */ private void initData(final View view) { String url="http://112.124.22.238:8081/course_api/wares/hot"+"?curPage="+currPage+"&pageSize="+pageSize; //使用封装好的okhttp,解析数据 httpHelper.get(url, new SpotsCallBack<HotBean>(getContext()){ @Override public void onSuccess(Response response, HotBean hotBean) { mhotBean=hotBean; showData(view); } @Override public void onError(Response response, int code, Exception e) { } }); } private void showData(View view){ switch (state){ case STATE_NORMAL: { Log.d("获取的Hot数据",mhotBean.getList().get(0).getImgUrl()); mrecyclerView= (RecyclerView) view.findViewById(R.id.hot_recycler_view); hotGoodsAdapter=new HotGoodsAdapter(mhotBean); mrecyclerView.setAdapter(hotGoodsAdapter); //必须写才能出现recyclorView,也可以是GirdLayoutManager,只是显示item的图形不一样 mrecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); //设置分割线 mrecyclerView.setItemAnimator(new DefaultItemAnimator()); mrecyclerView.addItemDecoration(new HomeItemDecoration()); } break; case STATE_REFREH: { mrecyclerView= (RecyclerView) view.findViewById(R.id.hot_recycler_view); hotGoodsAdapter=new HotGoodsAdapter(mhotBean); mrecyclerView.setAdapter(hotGoodsAdapter); //必须写才能出现recyclorView,也可以是GirdLayoutManager,只是显示item的图形不一样 mrecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); //设置分割线 mrecyclerView.setItemAnimator(new DefaultItemAnimator()); mrecyclerView.addItemDecoration(new HomeItemDecoration()); mrecyclerView.scrollToPosition(0); materialRefreshLayout.finishRefresh(); } case STATE_MORE: { mrecyclerView= (RecyclerView) view.findViewById(R.id.hot_recycler_view); hotGoodsAdapter=new HotGoodsAdapter(mhotBean); mrecyclerView.setAdapter(hotGoodsAdapter); //必须写才能出现recyclorView,也可以是GirdLayoutManager,只是显示item的图形不一样 mrecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); //设置分割线 mrecyclerView.setItemAnimator(new DefaultItemAnimator()); mrecyclerView.addItemDecoration(new HomeItemDecoration()); mrecyclerView.scrollToPosition(mhotBean.getList().size()); materialRefreshLayout.finishRefreshLoadMore(); } break; default: break; } }