RecyclerView 表格布局带标题用GridLayoutManager

本文详细介绍如何在Android应用中使用RecyclerView结合GridLayout实现标题与列表项的跨行显示,通过自定义Adapter和SpanSizeLookup来优化布局效果。

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

在这里插入在这里插入图片描述图片描述

frgment里面的 关键代码

  @Override
    protected void initView() {
//数据初始化
        List<BlessingBean> list = new ArrayList();
        for (int i = 0; i < 30; i++) {
            BlessingBean blessingBean = new BlessingBean();
            if (i == 0 || i == 5) {
                blessingBean.setItemTitle("标题" + i);
                blessingBean.setTitle(false);
                blessingBean.setIv("");

            } else {
                blessingBean.setItemTitle("item" + i);
                blessingBean.setTitle(true);
                blessingBean.setIv("");
            }
            list.add(blessingBean);


        }
        relativeLayout_tree = getView().findViewById(R.id.relativeLayout_tree);
        relativeLayout_tree.setOnClickListener(this);
        RecyclerView recyclerView = getView().findViewById(R.id.recyclerView);

        blessingAdaper = new BlessingAdaper(list);
        //这里是关键代码 如果你的布局是一个LayoutManager 布局这块就可以不用添加,如果布局是表格布局就做判断标题就得跨行,设置显示几个跨行就几个...
        GridLayoutManager gridLayoutManager = new GridLayoutManager(BaseApplication.instance, 3);
        gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                if (blessingAdaper.getItemViewType(position) == 0) {
                    //标题跨4行
                    return 3;
                }
                return 1;
            }
        });
        recyclerView.setLayoutManager(gridLayoutManager);
        recyclerView.setAdapter(blessingAdaper);


    }

Adaper 里面的关键代码

package com.degress.vein.pray.blessing;

import android.support.annotation.NonNull;
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.degress.core.base.BaseApplication;
import com.degress.vein.R;
import com.degress.vein.global.bean.BlessingBean;

import java.util.List;

public class BlessingAdaper extends RecyclerView.Adapter<BlessingAdaper.BaseHolder> {
    private List<BlessingBean> list;
    private static final int VIEW_TYPE_TITLE = 0;
    private static final int VIEW_TYPE_ITEM = 1;
    BlessingAdaper(List<BlessingBean> list) {
        this.list = list;
    }

    @NonNull
    @Override
    public BaseHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        BaseHolder view = null;
        LayoutInflater layoutInflater = LayoutInflater.from(BaseApplication.instance);
        switch (i){
            case VIEW_TYPE_TITLE:
                view = new HodlerTiele(layoutInflater.inflate(R.layout.item_blessing_title, viewGroup, false));
                break;
            case VIEW_TYPE_ITEM:
                view = new HodlerItem(layoutInflater.inflate(R.layout.item_blessing_item, viewGroup, false));
                break;
        }

        return view;
    }

    @Override
    public void onBindViewHolder(@NonNull BaseHolder baseHodler, int i) {
        if (getItemViewType(i) == VIEW_TYPE_TITLE) {
            HodlerTiele hodlerTiele = (HodlerTiele) baseHodler;
            hodlerTiele.tv_title.setText(list.get(i).getItemTitle());
        } else {
            HodlerItem hodlerItem = (HodlerItem) baseHodler;
            hodlerItem.tv_title_item.setText(list.get(i).getItemTitle());
            hodlerItem.imageView.setImageResource(R.mipmap.icon);
        }
    }

    @Override
    public int getItemViewType(int position) {
        if (!list.get(position).isTitle()) {
            return VIEW_TYPE_TITLE;
        }
        return VIEW_TYPE_ITEM;
    }

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

    public class BaseHolder extends RecyclerView.ViewHolder {

        public BaseHolder(@NonNull View itemView) {
            super(itemView);
        }
    }

    public class HodlerTiele extends BaseHolder{
        TextView tv_title;
        public HodlerTiele(@NonNull View itemView) {
            super(itemView);
            tv_title = itemView.findViewById(R.id.tv_title_bless);

        }
    }

    public class HodlerItem  extends BaseHolder{
        TextView tv_title_item;
        ImageView imageView;

        public HodlerItem(@NonNull View itemView) {
            super(itemView);
            tv_title_item = itemView.findViewById(R.id.tv_item_bless);
            imageView = itemView.findViewById(R.id.iv_icon);
        }
    }
}

是不是超级简单

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值