首先我是先创建了一个fragment+viewpager,然后在fragment其中的一个页面操作xrecyclerview和多条目显示,同时还做了Banner的轮播图
接下来先看一下fragment中的代码,xml中自己可以自定义配置,这里我就不贴了
package com.example.enddemo.fragments; import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.enddemo.R; import com.example.enddemo.utils.GsonObjectCallback; import com.example.enddemo.utils.HomeBean; import com.example.enddemo.utils.OkHttp3Utils; import com.jcodecraeer.xrecyclerview.XRecyclerView; import java.io.IOException; import java.util.ArrayList; import java.util.List; import okhttp3.Call; /** * Created by Administrator on 2017/10/25 0025. */ public class Fragment1 extends Fragment { private XRecyclerView recyclerView; private Context context; private List<HomeBean.SongListBean > list; int mm=21; String mpath="http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type="+mm+"&size=10&offset=0&qq-pf-to=pcqq.c2c"; //获取数据的开始 private int curr; private MyAdapter adapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view=inflater.inflate(R.layout.frag1,container,false); recyclerView=(XRecyclerView)view.findViewById(R.id.xre_xrv); list=new ArrayList<>(); //LinearLayoutManager是线性布局,setOrientation可以设置他的方向是横向还是纵向。 LinearLayoutManager layoutManager=new LinearLayoutManager(context); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(layoutManager); recyclerView.setLoadingListener(new XRecyclerView.LoadingListener() { @Override //下拉刷新 public void onRefresh() { //当下拉刷新的时候,重新获取数据,所有curr要变回0,并且把集合list清空 list.clear(); getData(mpath,""); recyclerView.refreshComplete(); } @Override //上拉加载 public void onLoadMore() { mm++; getData(mpath,"load"); String mpath="http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type="+mm+"&size=10&offset=0&qq-pf-to=pcqq.c2c"; } }); //第一次获取数据 getData(mpath,""); return view; } public void getData(String url, final String curr){ OkHttp3Utils.getInstance().doGet(url, new GsonObjectCallback<HomeBean>() { @Override public void onUi(HomeBean homeBean) { List<HomeBean.SongListBean> data = homeBean.getSong_list(); if(curr.equals("load")){ list.addAll(data); adapter.notifyDataSetChanged(); recyclerView.loadMoreComplete(); }else { list=homeBean.getSong_list(); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); adapter=new MyAdapter(getActivity(),list); recyclerView.setAdapter(adapter); } } @Override public void onFailed(Call call, IOException e) { } }); } }这个代码通过给OKhttp的网络请求传值来完成分页和上拉加载下拉刷新的功能,那么数据配置我们来看一下适配器中的代码
package com.example.enddemo.fragments; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.example.enddemo.R; import com.example.enddemo.utils.GlideImaGlideImageLoader; import com.example.enddemo.utils.HomeBean; import com.nostra13.universalimageloader.core.ImageLoader; import com.youth.banner.Banner; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2017/10/25 0025. */ public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ List<HomeBean.SongListBean> list; Context context; ArrayList mlist; ImageLoader loader; public MyAdapter(Context context, List<HomeBean.SongListBean> list) { this.context = context; this.list = list; mlist=new ArrayList(); loader=ImageLoader.getInstance(); } public enum Item_Type{ typeone,typetwo } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType==Item_Type.typeone.ordinal()){ View view= LayoutInflater.from(context).inflate(R.layout.my_banner,parent,false); ViewHolderA va=new ViewHolderA(view); return va; }else if(viewType==Item_Type.typetwo.ordinal()){ View view= LayoutInflater.from(context).inflate(R.layout.my_item,parent,false); ViewHolderB vB=new ViewHolderB(view); return vB; } return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if(holder instanceof ViewHolderA){ for(int i=0; i<list.size();i++){ String ad1s = list.get(i).getPic_big(); mlist.add(ad1s); } ((ViewHolderA) holder).mbanner.setImageLoader(new GlideImaGlideImageLoader()); ((ViewHolderA) holder).mbanner.setImages(mlist); ((ViewHolderA) holder).mbanner.start(); }else if(holder instanceof ViewHolderB){ String img = list.get(position).getPic_big(); loader.displayImage(img, ((ViewHolderB) holder).img); ((ViewHolderB) holder).text.setText(list.get(position).getAlbum_title()); } } @Override public int getItemCount() { return list.size(); } @Override public int getItemViewType(int position) { if(position==0){ return Item_Type.typeone.ordinal(); }else{ return Item_Type.typetwo.ordinal(); } } public class ViewHolderA extends RecyclerView.ViewHolder{ Banner mbanner; public ViewHolderA(View itemView) { super(itemView); mbanner=(Banner) itemView.findViewById(R.id.banners); } } public class ViewHolderB extends RecyclerView.ViewHolder{ TextView text; ImageView img; public ViewHolderB(View itemView) { super(itemView); text=(TextView) itemView.findViewById(R.id.tv); img=(ImageView)itemView.findViewById(R.id.imgs); } } }