RecyclerView多布局展示示例

注:所需的依赖

compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
1.适配器类

public class Myadapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    //定义两种不同的布局类型
    private int ONE_ITEM=1;
    private int TWO_ITEM=2;
    private Context mcontext;
    private ArrayList<String> mlist;

    public Myadapter(Context mcontext, ArrayList<String> mlist) {
        this.mcontext = mcontext;
        this.mlist = mlist;
    }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater lay = LayoutInflater.from(mcontext);
        RecyclerView.ViewHolder holder=null;
        //根据不同布局类型将XML引入进来
        if (ONE_ITEM==viewType){
            View view = lay.inflate(R.layout.two_item, parent, false);
            holder=new OneViewHolder(view);

        }else {

            View view2 = lay.inflate(R.layout.one_item, parent, false);
            holder=new TwoViewHolder(view2);

        }

        return holder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        //根据不同的ViewHolder绑定数据
if (holder instanceof OneViewHolder){
    ((OneViewHolder)holder).tv3.setText(mlist.get(position));
}else {
    ((TwoViewHolder) holder).tv1.setText(mlist.get(position));
    ((TwoViewHolder) holder).tv2.setText(mlist.get(position));

}

    }

    @Override
    public int getItemCount() {
        return mlist.size();

    }

    //定义两个ViewHolder类,将不同布局的控件初始化
    class OneViewHolder extends RecyclerView.ViewHolder{

        TextView tv3;
        public OneViewHolder(View itemView) {
            super(itemView);
            tv3=(TextView)itemView.findViewById(R.id.adapter_linear_text);

        }
    }


    class TwoViewHolder extends RecyclerView.ViewHolder{

        TextView tv1,tv2;
        public TwoViewHolder(View itemView) {
            super(itemView);
            tv1=(TextView)itemView.findViewById(R.id.adapter_two_1);
            tv2=(TextView)itemView.findViewById(R.id.adapter_two_2);

        }
    }

    //根据具体条件判断返回哪种类型的布局
    @Override
    public int getItemViewType(int position) {

        if (position % 3==0){
            return TWO_ITEM;
        }else {
            return ONE_ITEM;
        }

    }

}

2.MainActivity类

public class MainActivity extends AppCompatActivity {
    private RecyclerView mrv;
    private Myadapter md;
    private ArrayList<String> mlist;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initdata();
        initview();
    }

    private void initdata() {
        mlist=new ArrayList<>();
       for (int i=0;i<30;i++){
       mlist.add("位置"+i);

}
    }

    private void initview() {
        mrv=(RecyclerView)findViewById(R.id.recy);
        md=new Myadapter(MainActivity.this,mlist);
        mrv.setLayoutManager(new LinearLayoutManager(this));
        mrv.setAdapter(md);

    }
}
RecyclerView多布局展示示例