RecyclerView多條目載入(網路請求資料)
阿新 • • 發佈:2019-01-02
RecyclerView多條目載入和ListView的多條目載入用法是一樣的,程式碼如下:
1.匯入RecyclerView或XRecyclerView的依賴包(自己按照需求匯入依賴包,下面RecyclerView可以替換成XRecyclerView)XRecyclerView可以實現上拉載入,下拉重新整理,而RecyclerView不可以
//Recyclerview compile 'com.android.support:recyclerview-v7:22.1.1' compile 'com.android.support:appcompat-v7:22.1.1'
2.xml的佈局檔案
<android.support.v7.widget.RecyclerView android:id="@+id/id_recyclerview" android:divider="#ffff0000" android:dividerHeight="10dp" android:layout_width="match_parent" android:layout_height="match_parent" />
3.自己定義多條目的佈局
一、Adapter(簡單的多條目)
public class ThreeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private final intTYPRONE = 1; private final int TYPETWO = 2; Context context; MusicBean bean; ArrayList<MusicBean.SongListBean> list; ArrayList<MusicBean.SongListBean> list1; public ThreeAdapter(Context context, MusicBean bean) { this.context = context; this.bean= bean; } @Override public int getItemViewType(int position) { if(position%2==0){ return TYPRONE; } else if(position%2==1){ return TYPETWO; } else { return super.getItemViewType(position); } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(viewType==TYPRONE){ View view = LayoutInflater.from(context).inflate(R.layout.three_item_one, null); ViewHolderA viewHolderA = new ViewHolderA(view); return viewHolderA; }else if(viewType==TYPETWO){ View view = LayoutInflater.from(context).inflate(R.layout.three_item_two, null); ViewHolderB viewHolderB = new ViewHolderB(view); return viewHolderB; } return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if(holder instanceof ViewHolderA){ list1=new ArrayList<>(); for(int i=0;i<bean.getSong_list().size();i++){ list1.add(new MusicBean.SongListBean(bean.getSong_list().get(position).getPic_small(),bean.getSong_list().get(position).getTitle())); } ImageLoader.getInstance().displayImage(list1.get(position).getPic_small(),((ViewHolderA) holder).img); }else if(holder instanceof ViewHolderB){ list=new ArrayList<>(); for(int i=0;i<bean.getSong_list().size();i++){ list.add(new MusicBean.SongListBean(bean.getSong_list().get(position).getPic_small(),bean.getSong_list().get(position).getTitle())); } ((ViewHolderB) holder).text.setText(list.get(position).getTitle()); } } @Override public int getItemCount() { return bean.getSong_list().size(); } class ViewHolderA extends RecyclerView.ViewHolder{ ImageView img; public ViewHolderA(View itemView) { super(itemView); img= (ImageView) itemView.findViewById(R.id.item_img); } } class ViewHolderB extends RecyclerView.ViewHolder{ TextView text; public ViewHolderB(View itemView) { super(itemView); text= (TextView) itemView.findViewById(R.id.item_text); } }
MainActivity(簡單的)
RecyclerView re_three; ArrayList<MusicBean.SongListBean> songs; private String position; ThreeAdapter adapter; String url; String url2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_three); re_three= (RecyclerView) findViewById(R.id.re_three); url="http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=1
&offset=0";position = getIntent().getStringExtra("position"); getData();}public void getData() { OkHttp3Utils.getInstance().doGet(url, new GsonObjectCallback<MusicBean>() { @Overridepublic void onUi(MusicBean musicBean) { musicBean.getSong_list(); //Log.d("main2",musicBean.getSong_list().get(0).getAlbum_title()+"---"); adapter=new ThreeAdapter(ThreeActivity.this,musicBean); re_three.setLayoutManager(new LinearLayoutManager(ThreeActivity.this)); re_three.setAdapter(adapter); adapter.notifyDataSetChanged(); } @Overridepublic void onFailed(Call call, IOException e) { } });}
二、Adapter(複雜的)
Home_goods.DataBean list; Context mcontext; ArrayList mlist; ArrayList mlist2; ArrayList imgs_gwc; ArrayList<Home_goods.DataBean.SubjectsBean.GoodsListBeanX> goodslist; private Intent intent; //列舉型別 private enum Item_Type{ Typeone ,Typetwo,Typethree,Typefour,Typefive,Typesix; } public XRAdapter(Context mcontext, Home_goods.DataBean list) { this.mcontext = mcontext; this.list = list; intent = new Intent(mcontext, HomeWebActivity.class); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == Item_Type.Typeone.ordinal()) { View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycler_item_one, null); ViewHolderA viewHolder = new ViewHolderA(mView); return viewHolder; } else if (viewType == Item_Type.Typetwo.ordinal()) { View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycler_item_two, null); ViewHolderB viewHolder = new ViewHolderB(mView); return viewHolder; } else if (viewType == Item_Type.Typethree.ordinal()) { View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycler_item_three, null); ViewHolderC viewHolder = new ViewHolderC(mView); return viewHolder; }else if (viewType == Item_Type.Typefour.ordinal()) { View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycler_item_four, null); ViewHolderD viewHolder = new ViewHolderD(mView); return viewHolder; }else if (viewType == Item_Type.Typefive.ordinal()) { View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycler_item_five, null); ViewHolderE viewHolder = new ViewHolderE(mView); return viewHolder; }else if (viewType == Item_Type.Typesix.ordinal()) { View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycler_item_six, null); ViewHolderF viewHolder = new ViewHolderF(mView); return viewHolder; } return null; } @Override public void onBindViewHolder(final 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 GlideImageLoader()); ((ViewHolderA) holder).mbanner.setImages(mlist); ((ViewHolderA) holder).mbanner.start(); ((ViewHolderA) holder).mbanner.setOnBannerClickListener(new OnBannerClickListener() { @Override public void OnBannerClick(int position) { String data = list.getAd1().get(position-1).getAd_type_dynamic_data(); intent.putExtra("url",data); mcontext.startActivity(intent); Toast.makeText(mcontext,data,Toast.LENGTH_SHORT).show(); } }); } else if (holder instanceof ViewHolderB) { // ((ViewHolderB) holder).text.setText(list.getDefaultGoodsList().get(position).getGoods_name() + "------樣式二"); ((ViewHolderB) holder).t1.setText(list.getAd5().get(0).getTitle()); ((ViewHolderB) holder).t2.setText(list.getAd5().get(1).getTitle()); ((ViewHolderB) holder).t3.setText(list.getAd5().get(2).getTitle()); ((ViewHolderB) holder).t4.setText(list.getAd5().get(3).getTitle()); ImageLoader.getInstance().displayImage(list.getAd5().get(0).getImage(),((ViewHolderB) holder).img1); ImageLoader.getInstance().displayImage(list.getAd5().get(1).getImage(),((ViewHolderB) holder).img2); ImageLoader.getInstance().displayImage(list.getAd5().get(2).getImage(),((ViewHolderB) holder).img3); ImageLoader.getInstance().displayImage(list.getAd5().get(3).getImage(),((ViewHolderB) holder).img4); } else if (holder instanceof ViewHolderC) { // ((ViewHolderC) holder).text.setText(list.getDefaultGoodsList().get(position).getGoods_name()+ "------樣式三"); }else if (holder instanceof ViewHolderD) { imgs_gwc=new ArrayList(); for(int i=0;i<list.getActivityInfo().getActivityInfoList().size();i++){ imgs_gwc.add(list.getActivityInfo().getActivityInfoList().get(i).getActivityImg()); } ((ViewHolderD) holder).re2.setLayoutManager(new StaggeredGridLayoutManager(1,StaggeredGridLayoutManager.HORIZONTAL)); ((ViewHolderD) holder).re2.setAdapter(new MyAdapter_gwc(imgs_gwc,mcontext)); }else if (holder instanceof ViewHolderE) { mlist2=new ArrayList(); for(int i=0;i<list.getSubjects().size();i++){ mlist2.add(list.getSubjects().get(i).getImage()); } //設定圖片載入器 ((ViewHolderE) holder).banner2.setImageLoader(new GlideImageLoader()); ((ViewHolderE) holder).banner2.setImages(mlist2); ((ViewHolderE) holder).banner2.start(); ((ViewHolderE) holder).banner2.setOnBannerClickListener(new OnBannerClickListener() { @Override public void OnBannerClick(int position) { String wapUrl = list.getSubjects().get(position).getWapUrl(); intent.putExtra("url",wapUrl); mcontext.startActivity(intent); } }); }else if (holder instanceof ViewHolderF) { goodslist=new ArrayList(); for(int i=0;i<list.getDefaultGoodsList().size();i++){ String goods_name = list.getDefaultGoodsList().get(i).getGoods_name(); String goods_img = list.getDefaultGoodsList().get(i).getGoods_img(); goodslist.add(new Home_goods.DataBean.SubjectsBean.GoodsListBeanX(goods_name,goods_img)); } ((ViewHolderF) holder).re3.setLayoutManager(new StaggeredGridLayoutManager(1,StaggeredGridLayoutManager.HORIZONTAL)); ((ViewHolderF) holder).re3.setAdapter(new MyAdapter_goods(mcontext,goodslist)); } } @Override public int getItemCount() { return 6; } //返回值賦值給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(); }else if (position == 4) { return Item_Type.Typefive.ordinal(); }else if (position == 5) { return Item_Type.Typesix.ordinal(); } return -1; } class ViewHolderA extends RecyclerView.ViewHolder { public Banner mbanner; public ViewHolderA(View itemView) { super(itemView); mbanner = (Banner) itemView.findViewById(R.id.banner); } } class ViewHolderB extends RecyclerView.ViewHolder { public TextView t1; public TextView t2; public TextView t3; public TextView t4; public ImageView img1; public ImageView img2; public ImageView img3; public ImageView img4; public ViewHolderB(View itemView) { super(itemView); t1= (TextView) itemView.findViewById(R.id.id_num1); t2= (TextView) itemView.findViewById(R.id.id_num2); t3= (TextView) itemView.findViewById(R.id.id_num3); t4= (TextView) itemView.findViewById(R.id.id_num4); img1= (ImageView) itemView.findViewById(R.id.id_image1); img2= (ImageView) itemView.findViewById(R.id.id_image2); img3= (ImageView) itemView.findViewById(R.id.id_image3); img4= (ImageView) itemView.findViewById(R.id.id_image4); } } class ViewHolderC extends RecyclerView.ViewHolder { public ViewHolderC(View itemView) { super(itemView); } } class ViewHolderD extends RecyclerView.ViewHolder { public RecyclerView re2; public ViewHolderD(View itemView) { super(itemView); re2= (RecyclerView) itemView.findViewById(R.id.id_recyclerview2); } } class ViewHolderE extends RecyclerView.ViewHolder { public Banner banner2; public ViewHolderE(View itemView) { super(itemView); banner2= (Banner) itemView.findViewById(R.id.banner2); } } class ViewHolderF extends RecyclerView.ViewHolder { public RecyclerView re3; public ViewHolderF(View itemView) { super(itemView); re3= (RecyclerView) itemView.findViewById(R.id.id_recyclerview_bottom); } }
MainActivity
//新加的 xr= (XRecyclerView)view.findViewById(R.id.xre_xrv); //加布局管理器 LinearLayoutManager layoutManager=new LinearLayoutManager(getActivity()); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); xr.setLayoutManager(layoutManager); xr.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { curr=0; list.clear(); getData(path_url,curr); xr.refreshComplete(); } @Override public void onLoadMore() { curr++; getData(path_url,curr); xr.refreshComplete(); } }); getData(path_url,1); return view; } //初始化資料 private void getData(String url,int curr){ OkHttp3Utils.getInstance().doGet(url, new GsonObjectCallback<Home_goods>() { @Override public void onUi(Home_goods homeBean) { homeBean.getMsg(); mxradapter = new XRAdapter(getActivity(),homeBean.getData()); xr.setAdapter(mxradapter); } @Override public void onFailed(Call call, IOException e) { } });
//載入輪播圖圖片
GlideImageLoader
public class GlideImageLoader extends ImageLoader { @Override public void displayImage(Context context, Object path, ImageView imageView) { Glide.with(context).load(path).into(imageView); } }