1、添加库
dependencies {
compile 'com.cjj.materialrefeshlayout:library:1.3.0'
}
2、在布局文件添加代码
<com.cjj.MaterialRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/refresh" android:layout_width="match_parent" android:layout_height="match_parent" > <...ListView or GridView or RecyclerView or ScrollView and more...> </com.cjj.MaterialRefreshLayout>3、java文件
materialRefreshLayout = (MaterialRefreshLayout) findViewById(R.id...); materialRefreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() { @Override public void onRefresh(final MaterialRefreshLayout materialRefreshLayout) { //refreshing... } @Override public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) { //load more refreshing... } } // refresh complete materialRefreshLayout.finishRefresh(); // load more refresh complete materialRefreshLayout.finishRefreshLoadMore();小案例:
布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.cjj.MaterialRefreshLayout android:id="@+id/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/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> </com.cjj.MaterialRefreshLayout> </LinearLayout>商品类:
public class Wares implements Serializable { private Long id; private String name; private String imgUrl; private String description; private Float price; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getImgUrl() { return imgUrl; } public void setImgUrl(String imgUrl) { this.imgUrl = imgUrl; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Float getPrice() { return price; } public void setPrice(Float price) { this.price = price; } }分页类:
public class Page<T> { private int currentPage; private int pageSize; private int totalPage; private int totalCount; private List<T> list; public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public List<T> getList() { return list; } public void setList(List<T> list) { this.list = list; } }主activity:
public class HotFragment extends Fragment { private OkHttpHelper httpHelper = OkHttpHelper.getInstance(); private int currPage=1; private int totalPage=1; private int pageSize=10; private List<Wares> datas; private HotWaresAdapter mAdatper; @ViewInject(R.id.recyclerview) private RecyclerView mRecyclerView; @ViewInject(R.id.refresh_view) private MaterialRefreshLayout mRefreshLaout; 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; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view= inflater.inflate(R.layout.fragment_hot,container,false); ViewUtils.inject(this,view); initRefreshLayout(); getData(); return view ; } private void initRefreshLayout(){ mRefreshLaout.setLoadMore(true); mRefreshLaout.setMaterialRefreshListener(new MaterialRefreshListener() { @Override public void onRefresh(MaterialRefreshLayout materialRefreshLayout) { refreshData(); } @Override public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) { if(currPage <=totalPage) loadMoreData(); else{ mRefreshLaout.finishRefreshLoadMore(); } } }); } private void refreshData(){ currPage =1; state=STATE_REFREH; getData(); } private void loadMoreData(){ currPage = ++currPage; state = STATE_MORE; getData(); } private void getData(){ String url = Contants.API.WARES_HOT+"?curPage="+currPage+"&pageSize="+pageSize; httpHelper.get(url, new SpotsCallBack<Page<Wares>>(getContext()) { @Override public void onSuccess(Response response, Page<Wares> waresPage) { datas = waresPage.getList(); currPage = waresPage.getCurrentPage(); totalPage =waresPage.getTotalPage(); showData(); } @Override public void onError(Response response, int code, Exception e) { } }); } private void showData(){ switch (state){ case STATE_NORMAL: mAdatper = new HotWaresAdapter(datas); mRecyclerView.setAdapter(mAdatper); mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); mRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(),DividerItemDecoration.VERTICAL_LIST)); break; case STATE_REFREH: mAdatper.clearData(); mAdatper.addData(datas); mRecyclerView.scrollToPosition(0); mRefreshLaout.finishRefresh(); break; case STATE_MORE: mAdatper.addData(mAdatper.getDatas().size(),datas); mRecyclerView.scrollToPosition(mAdatper.getDatas().size()); mRefreshLaout.finishRefreshLoadMore(); break; } } }recycleview设置的adapter类
package hzu.calculator.net.adapter; import android.net.Uri; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; import hzu.calculator.net.R; import hzu.calculator.net.bean.Wares; /** * Created by <a href="http://www.cniao5.com">菜鸟窝</a> * 一个专业的Android开发在线教育平台 */ public class HotWaresAdapter extends RecyclerView.Adapter<HotWaresAdapter.ViewHolder> { private List<Wares> mDatas; private LayoutInflater mInflater; public HotWaresAdapter(List<Wares> wares){ mDatas = wares; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { mInflater = LayoutInflater.from(parent.getContext()); View view = mInflater.inflate(R.layout.template_hot_wares,null); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { Wares wares = getData(position); holder.draweeView.setImageURI(Uri.parse(wares.getImgUrl())); holder.textTitle.setText(wares.getName()); holder.textPrice.setText("¥"+wares.getPrice()); } public Wares getData(int position){ return mDatas.get(position); } public List<Wares> getDatas(){ return mDatas; } public void clearData(){ mDatas.clear(); notifyItemRangeRemoved(0,mDatas.size()); } public void addData(List<Wares> datas){ addData(0,datas); } public void addData(int position,List<Wares> datas){ if(datas !=null && datas.size()>0) { mDatas.addAll(datas); notifyItemRangeChanged(position, mDatas.size()); } } @Override public int getItemCount() { if(mDatas!=null && mDatas.size()>0) return mDatas.size(); return 0; } class ViewHolder extends RecyclerView.ViewHolder{ SimpleDraweeView draweeView; TextView textTitle; TextView textPrice; public ViewHolder(View itemView) { super(itemView); draweeView = (SimpleDraweeView) itemView.findViewById(R.id.drawee_view); textTitle= (TextView) itemView.findViewById(R.id.text_title); textPrice= (TextView) itemView.findViewById(R.id.text_price); } } }