RecyclerView的使用

本文介绍如何使用RecyclerView实现多种布局样式,包括竖向、横向列表,网格布局及瀑布流效果。通过自定义Adapter实现了不同样式的Item展示,并提供了具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RecyclerView的使用

要使用recyclerView,需在本项目的build.gradle中添加

compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
RecyclerView可以实现Listview,Girdview的展示样式,以及实现瀑布流的样式

展示横向,竖向排列的样式:

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);//VERTICAL表示竖向排列,Horizontal表示横向排列
展示网格的样式:

GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);//3是表示内容占3列
展示瀑布流的样式:

StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
//RecyclerView的展示样式
linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
gridLayoutManager = new GridLayoutManager(this, 3);
//设置以瀑布流形式展示
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
//设置RecyclerView的展示样式
recyclerView.setLayoutManager(linearLayoutManager);

RecyclerView的item想要展示不同的样式,adapter类这样写:

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<String> data;

    public MyAdapter() {
        data = new ArrayList<String>();
        for (int i = 0; i < 30; i++) {
            data.add("这是条目" + i);
       
        }
    }

    private OnItemClickListener onItemClickListener;
    private OnItemLongClickListener onItemLongClickListener;

    //创建布局和viewHolder
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = null;
        RecyclerView.ViewHolder holder = null;
        switch (viewType) {
            case 0:
                //inflate的时候,需要传入parent和attachToRoot==false; 使用传入三个参数的方法
                view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view, parent, false);
                holder = new MyViewHolder(view);
                break;
            case 1:
                view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view2, parent, false);
                holder = new MyViewHolder2(view);
                break;
        }

        return holder;
    }

    //绑定数据
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        switch (getItemViewType(position)) {
            case 0:
                MyViewHolder holder1 = (MyViewHolder) holder;
                holder1.showImage.setImageResource(R.drawable.bagua);
                holder1.showText.setText(data.get(position));
                break;
            case 1:
                MyViewHolder2 holder2 = (MyViewHolder2) holder;
                holder2.item2_iv.setImageResource(R.drawable.xing);
                holder2.item2_tv.setText(data.get(position));
                break;
        }
    }

    @Override
    public int getItemViewType(int position) {
        if (position % 2 == 0) {
            return 0;
        } else {
            return 1;
        }
    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder {

        private final ImageView showImage;
        private final TextView showText;
        View itemView;

        public MyViewHolder(View itemView) {
            super(itemView);
            showImage = (ImageView) itemView.findViewById(R.id.showImage);
            showText = (TextView) itemView.findViewById(R.id.showText);
            this.itemView = itemView;
        }
    }

    public class MyViewHolder2 extends RecyclerView.ViewHolder {

        private final ImageView item2_iv;
        private final TextView item2_tv;

        public MyViewHolder2(View itemView) {
            super(itemView);
            item2_iv = (ImageView) itemView.findViewById(R.id.item2_Iv);
            item2_tv = (TextView) itemView.findViewById(R.id.item2_Tv);
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperMonsterH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值