一个RecyclerView写出来的小Demo

步骤:

1.在一个相对布局里面放一个RecyclerView,需要注意的是RecyclerView是单独存在于V7包中的,所以使用的时候需要单独导包

2.在主函数中初始化RecyclerView,给它设置Adapter.


重点:其实RecyclerView与ListView相比的话,更重要的是它的复用性,所以在适配器这块的逻辑是不同的.


RecyclerView的Adapter:通过最下面的Adapter代码观察就会发现,其实它们的代码结构大同小异,而如果要改变 RecyclerView的结构的话只需要修改一点点代码就可以了.比如:

需要线性布局的话使用LinearLayoutManager 

需要九宫格布局的话就使用GridLayoutManager 

需要瀑布流布局的话就使用StaggeredGridLayoutManager 

另外:下面有对RecyclerView的Adapter中的方法做出注释


大体代码如下:

recyclerView = (RecyclerView) findViewById(R.id.recycler);

//通常情况下这第二步是以下三种情况,选择需要的类型

private View initListView(boolean isVer) {
        toolbar.setSubtitle(isVer ?"LinearLayoutManager Vertical":"LinearLayoutManager Horizontal");


        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(isVer ? LinearLayoutManager.VERTICAL : LinearLayoutManager.HORIZONTAL);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(new ListAdapter(this,isVer));


       // recyclerView.setHasFixedSize(true);
        recyclerView.setBackgroundColor(Color.WHITE);
        return recyclerView;
    }


    private View initGridView(boolean isVer) {
        toolbar.setSubtitle(isVer ?"GridLayoutManager Vertical":"GridLayoutManager Horizontal");
        GridLayoutManager layoutManager = new GridLayoutManager(this,isVer ?3:4);
        layoutManager.setOrientation(isVer ? LinearLayoutManager.VERTICAL : LinearLayoutManager.HORIZONTAL);
        recyclerView.setLayoutManager(layoutManager);


        recyclerView.setHasFixedSize(true);
        recyclerView.setAdapter(new GridAdapter(this,isVer));
        return recyclerView;
    }


    private View initStaggeredGridView(boolean isVer) {
        toolbar.setSubtitle(isVer ?"StaggeredGridLayoutManager Vertical":"StaggeredGridLayoutManager Horizontal");
        StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2,isVer ? LinearLayoutManager.VERTICAL : LinearLayoutManager.HORIZONTAL);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(new StaggeredGridAdapter(this,isVer));
        return recyclerView;
    }


//这里我贴出它的三种Adapter代码,可以做个比较

recyclerView.setAdapter(你想要的类型的适配器);

ListAdapter :

package com.xxx.androidl.widget;


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.itheima.androidl.R;



//继承RecyclerView自带的Adapter
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ListHolder> {


    int icons[] = {R.drawable.vector_icon_cloud, R.drawable.vector_icon_movie, R.drawable.vector_icon_laptop, R.drawable.vector_icon_loop, R.drawable.vector_icon_menu, R.drawable.vector_icon_mood, R.drawable.vector_icon_palette, R.drawable.vector_icon_search, R.drawable.vector_icon_time, R.drawable.vector_icon_work};
    String names[] = {"Cloud", "Movie", "Laptop", "Loop", "Menu", "Mood", "Palette", "Search", "Time", "Work"};
    Context context;
    boolean flag;


    public ListAdapter(Context context, boolean flag) {
        this.context = context;
        this.flag = flag;
    }








    @Override
    public ListHolder onCreateViewHolder(ViewGroup parent, int viewType) {

//创建新的ViewHolder
       View view = LayoutInflater.from(context).inflate(flag ? R.layout.list_item : R.layout.list_item_h, parent, false);
        return new ListHolder(view);
    }

//给ViewHolder进行数据的绑定
    @Override
    public void onBindViewHolder(ListHolder holder, int position) {
        holder.setData(position);
    }

//设置item的数量
    @Override
    public int getItemCount() {
        return 1000;
   }




    class ListHolder extends RecyclerView.ViewHolder {
        ImageView icon;
        TextView name;
        TextView subName;


        public ListHolder(View itemView) {
            super(itemView);


//初始化ViewHolder
            icon = (ImageView) itemView.findViewById(R.id.icon);
            name = (TextView) itemView.findViewById(R.id.name);
            subName = (TextView) itemView.findViewById(R.id.subname);
        }


        public void setData(int position) {
            icon.setImageDrawable(context.getResources().getDrawable(icons[position % 10]));
            name.setText(names[position % 10]);
            subName.setText("This is position " + position);
        }




    }
}

GridAdapter 

package com.xxx.androidl.widget;


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.itheima.androidl.R;






public class GridAdapter extends RecyclerView.Adapter<GridAdapter.ListHolder>{


    int icons[] = {R.drawable.g1,R.drawable.g2,R.drawable.g3,R.drawable.g4,R.drawable.g5,R.drawable.g6,R.drawable.g7,R.drawable.g9,
            R.drawable.g10,R.drawable.g11,R.drawable.g12,R.drawable.g13,R.drawable.g14,R.drawable.g15,R.drawable.g16,R.drawable.g17,R.drawable.g18,R.drawable.g19,
            R.drawable.g20,R.drawable.g21,R.drawable.g22,R.drawable.g23,R.drawable.g24,R.drawable.g25,R.drawable.g26,R.drawable.g27,R.drawable.g28,R.drawable.g29,};


    String names[] = {"浏览器","输入法","健康","效率","教育","理财","阅读","个性化","购物","资讯","生活","工具","出行","通讯","拍照","社交","影音","安全","休闲","棋牌","益智","射击","体育","儿童","网游","角色","策略","经营","竞速"};
    Context context;
    boolean flag;
    public GridAdapter(Context context, boolean flag){
        this.context = context;
        this.flag = flag;
    }


    @Override
    public ListHolder onCreateViewHolder(ViewGroup parent, int viewType) {


        View view = LayoutInflater.from(context).inflate(R.layout.grid_item, parent, false);


        return new ListHolder(view);
    }




    @Override
    public void onBindViewHolder(ListHolder holder, int position) {
        holder.setData(position);
    }


    @Override
    public int getItemCount() {
        return 1000;
    }




    class ListHolder extends RecyclerView.ViewHolder {
        ImageView icon;
        TextView name;


        public ListHolder(View itemView) {
            super(itemView);
            icon = (ImageView) itemView.findViewById(R.id.pic);
            name = (TextView) itemView.findViewById(R.id.name);
        }


        public void setData(int position){
            icon.setImageDrawable(context.getResources().getDrawable(icons[position % icons.length]));
            name.setText(names[position % names.length]);
        }
    }
}

StaggeredGridAdapter 

package com.xxx.androidl.widget;


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.itheima.androidl.R;






public class StaggeredGridAdapter extends RecyclerView.Adapter<StaggeredGridAdapter.ListHolder>{


    Context context;
    boolean flag;
    int iconsV[] = {R.drawable.p1,R.drawable.p2,R.drawable.p3,R.drawable.p4,R.drawable.p5,R.drawable.p6,R.drawable.p7,R.drawable.p9,
            R.drawable.p10,R.drawable.p11,R.drawable.p12,R.drawable.p13,R.drawable.p14,R.drawable.p15,R.drawable.p16,R.drawable.p17,R.drawable.p18,R.drawable.p19,
            R.drawable.p20,R.drawable.p21,R.drawable.p22,R.drawable.p23,R.drawable.p24,R.drawable.p25,R.drawable.p26,R.drawable.p27,R.drawable.p28,R.drawable.p29,
            R.drawable.p30,R.drawable.p31,R.drawable.p32,R.drawable.p33,R.drawable.p34,R.drawable.p35,R.drawable.p36,R.drawable.p37,R.drawable.p38,R.drawable.p39,
            R.drawable.p40,R.drawable.p41,R.drawable.p42,R.drawable.p43,R.drawable.p44};


    int iconsH[] = {R.drawable.h1,R.drawable.h2,R.drawable.h3,R.drawable.h4,R.drawable.h5,R.drawable.h6,R.drawable.h7,R.drawable.h9,
            R.drawable.h10,R.drawable.h11,R.drawable.h12,R.drawable.h13,R.drawable.h14,R.drawable.h15,R.drawable.h16,R.drawable.h17,R.drawable.h18,R.drawable.h19,
            R.drawable.h20,R.drawable.h21,R.drawable.h22,R.drawable.h23,R.drawable.h24,R.drawable.h25,R.drawable.h26,R.drawable.h27,R.drawable.h28,R.drawable.h29,
            R.drawable.h30,R.drawable.h31,R.drawable.h32,R.drawable.h33,R.drawable.h34,R.drawable.h35,R.drawable.h36,R.drawable.h37,R.drawable.h38,R.drawable.h39,
            R.drawable.h40,R.drawable.h41,R.drawable.h42,R.drawable.h43,R.drawable.h44};
    public StaggeredGridAdapter(Context context, boolean flag){
        this.context = context;
        this.flag = flag;
    }


    @Override
    public ListHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(flag ? R.layout.staggered_grid_item : R.layout.staggered_grid_item_h, parent, false);
        return new ListHolder(view);
    }




    @Override
    public void onBindViewHolder(ListHolder holder, int position) {
        holder.setData(position);
    }


    @Override
    public int getItemCount() {
        return 1000;
    }




    class ListHolder extends RecyclerView.ViewHolder {
        ImageView icon;
        TextView name;


        public ListHolder(View itemView) {
            super(itemView);
            icon = (ImageView) itemView.findViewById(R.id.pic);
            name = (TextView) itemView.findViewById(R.id.name);
        }


        public void setData(int position){
            if (flag) {
                icon.setImageResource(iconsV[position % iconsV.length]);
            } else {
                icon.setImageResource(iconsH[position % iconsH.length]);
            }
            name.setText("This is position "+ position);
        }




    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值