RecyclerView多布局展示示例

来源:互联网 发布:php开发环境 编辑:程序博客网 时间:2024/05/20 02:24

注:所需的依赖

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);    }}


原创粉丝点击