在RecyclerView的上拉加载使用会比较麻烦,而XRecyclerView非常方便的决解了这些问题,都已经封装好了,我们只需要调用方法就OK了。下面是XRecyclerView的使用。
因为接口原因这里我只做了一个下拉刷新
配置build.gradle文件中直接添加依赖
compile 'com.jcodecraeer:xrecyclerview:1.3.2'
在布局中:
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:layout_width="match_parent"
android:id="@+id/xre_xrv"
android:layout_height="match_parent">
</com.jcodecraeer.xrecyclerview.XRecyclerView>
在Activity中:
public class RxActivity extends AppCompatActivity {
private XRecyclerView xr;
private List<String > list=new ArrayList<>();
//获取数据的开始
private int curr;
private XRAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rx);
//初始化xr
xr= (XRecyclerView) findViewById(R.id.xre_xrv);
//加布局管理器
LinearLayoutManager layoutManager=new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
xr.setLayoutManager(layoutManager);
//允许刷新加载
xr.setPullRefreshEnabled(true);
xr.setLoadingMoreEnabled(true);
xr.setLoadingListener(new XRecyclerView.LoadingListener() {
//刷新
@Override
public void onRefresh() {
curr=0;
list.clear();
getData(API.TYPE_HOME,curr);
xr.refreshComplete();
}
//加载
@Override
public void onLoadMore() {
/* curr++;
getData(API.TYPE_HOME,curr);
xr.loadMoreComplete();*/
}
});
getData(API.TYPE_HOME,1);
}
//初始化数据
private void getData(String url,int curr){
OkHttp3Utils.getInstance().doGet(url, new GsonObjectCallback<HomeBean>() {
@Override
public void onUi(HomeBean homeBean) {
homeBean.getMsg();
//关联适配器,并将集合传入适配器
XRAdapter mxradapter=new XRAdapter(RxActivity.this,homeBean.getData());
xr.setAdapter(mxradapter);
}
@Override
public void onFailed(Call call, IOException e) {
}
});
}
}
这里是一个RecyclerView的多条目加载
适配器:
public class XRAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
HomeBean.DataBean list;
Context mcontext;
ArrayList mlist;
//枚举类型
private enum Item_Type{
Typeone ,Typetwo,Typethree,Typefour
}
public XRAdapter(Context context, HomeBean.DataBean data) {
this.mcontext=context;
this.list=data;
}
/**
* 创建ViewHolder
*
* @param parent
* @param viewType :不同ItemView的类型
* @return
*/
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == Item_Type.Typeone.ordinal()) {
View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycle_item_a, null);
ViewHolderA viewHolder = new ViewHolderA(mView);
return viewHolder;
} else if (viewType == Item_Type.Typetwo.ordinal()) {
View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycle_item_b, null);
ViewHolderB viewHolder = new ViewHolderB(mView);
return viewHolder;
} else if (viewType == Item_Type.Typethree.ordinal()) {
View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycle_item_c, null);
ViewHolderC viewHolder = new ViewHolderC(mView);
return viewHolder;
}else if (viewType == Item_Type.Typefour.ordinal()) {
View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycle_item_d, null);
ViewHolderD viewHolder = new ViewHolderD(mView);
return viewHolder;
}
return null;
}
/**
* 绑定数据:可以直接拿到已经绑定控件的Viewholder对象
*
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ViewHolderA) {
mlist=new ArrayList();
for(int i=0;i<list.getAd1().size();i++){
mlist.add(list.getAd1().get(i).getImage());
}
//设置图片加载器
((ViewHolderA) holder).mbanner.setImageLoader(new GlideImaGlideImageLoader());
((ViewHolderA) holder).mbanner.setImages(mlist);
((ViewHolderA) holder).mbanner.start();
} else if (holder instanceof ViewHolderB) {
((ViewHolderB) holder).text.setText(list.getDefaultGoodsList().get(position).getGoods_name() + "------样式二");
} else if (holder instanceof ViewHolderC) {
((ViewHolderC) holder).text.setText(list.getDefaultGoodsList().get(position).getGoods_name()+ "------样式三");
}else if (holder instanceof ViewHolderD) {
((ViewHolderD) holder).text.setText(list.getDefaultGoodsList().get(position).getGoods_name()+ "------样式4");
}
}
@Override
public int getItemCount() {
return 4;
}
//返回值赋值给onCreateViewHolder的参数 viewType
@Override
public int getItemViewType(int position) {
// return super.getItemViewType(position);
if (position == 0) {
return Item_Type.Typeone.ordinal();
} else if (position == 1) {
return Item_Type.Typetwo.ordinal();
} else if (position == 2) {
return Item_Type.Typethree.ordinal();
}else if (position == 3) {
return Item_Type.Typefour.ordinal();
}
return -1;
}
class ViewHolderA extends RecyclerView.ViewHolder {
public Banner mbanner;
public ViewHolderA(View itemView) {
super(itemView);
mbanner = (Banner) itemView.findViewById(R.id.mybanner);
}
}
class ViewHolderB extends RecyclerView.ViewHolder {
public TextView text;
public ViewHolderB(View itemView) {
super(itemView);
text = (TextView) itemView.findViewById(R.id.tvb);
}
}
class ViewHolderC extends RecyclerView.ViewHolder {
public TextView text;
public ViewHolderC(View itemView) {
super(itemView);
text = (TextView) itemView.findViewById(R.id.tvc);
}
}
class ViewHolderD extends RecyclerView.ViewHolder {
public TextView text;
public ViewHolderD(View itemView) {
super(itemView);
text = (TextView) itemView.findViewById(R.id.tvd);
}
}
}