1. 程式人生 > >RecyclerView多條目載入(網路請求資料)

RecyclerView多條目載入(網路請求資料)

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 int 
TYPRONE = 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);

    }
}