android 给多列的RecycleView添加头布局

本文介绍如何在安卓应用中为一个多列的RecycleView添加头部视图,常见于商城类界面,顶部包含viewpager,下方是GridlayoutManager管理的RecycleView。内容涉及具体的实现步骤。

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

在工作中遇到商城类的界面,界面上半部分是viewpager,下部分是多列的GridView,具体实现:


1、在设置RecycleView的manager时使用GridlayoutManager的

setSpanSizeLookup属性设置头布局所占的宽度:
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        if (position == 0) {
            return 头布局所占的个数;
        } else {
            return 1;
        }
    }
});
在Adapter中给RecycleView.Adapter设置一个setHeadView()方法,在adapter中接收头布局,然后在判断条目的类型时如果是头的话,就直接将view添加进去,如果是正常的条目,就按正常的加。
具体代码:
GridLayoutManager manager = new GridLayoutManager(getContext(), 2);
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        if (position == 0) {
            return 3;
        } else {
            return 1;
        }
    }
});
manager.setOrientation(LinearLayoutManager.VERTICAL);
recycleview.setLayoutManager(manager);
mAdapter = new MyRecycleAdapter(getContext(), list);
//        headView = View.inflate(getContext(), R.layout.shop_head, null);
headView = new Recycle(getContext());

//设置轮播图的图片
headView.setImages(images);
//        initHeadView();
mAdapter.addHeadView(headView);
recycleview.setAdapter(mAdapter);

adapter代码:
public class MyRecycleAdapter extends RecyclerView.Adapter<MyRecycleAdapterHolder> {

    private View    headView;
    private Context mContext;
    private List<String> count;

    public MyRecycleAdapter(Context mContext, List<String> list ) {
        this.count = list;
        this.mContext = mContext;
    }

    /**
     * 设置数据源总的条目
     */
    @Override
    public int getItemCount() {
        //返回条目数加头布局个数
        return count==null? 2:count.size()+2;
    }

    @Override
    public void onBindViewHolder(MyRecycleAdapterHolder holder,
                                 final int position) {
        int itemViewType = getItemViewType(position);
        // 头部
        if (itemViewType == ShopFragment.HEADER_RECYCLER_VIEW_ITEM) {
            return;
        } else if (itemViewType == ShopFragment.NORMAL_RECYCLER_VIEW_ITEM) {//普通条目
            /*holder.iv_add.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(mContext, "添加购物车", Toast.LENGTH_SHORT).show();
                    if (mOnImageClickListener != null) {
                        mOnImageClickListener.onClick();
                    }
                }
            });*/
            holder.pic.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(mContext, ShowActivity.class);
                    Bundle bundle = new Bundle();
                    bundle.putInt("Item", i);
                    intent.putExtra("fragment", DetailFragment.class);
                    mContext.startActivity(intent);
                }
            });
        }

    }

    @Override
    public MyRecycleAdapterHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View root = null;
        if (viewType == ShopFragment.HEADER_RECYCLER_VIEW_ITEM) {
            root = headView;
        } else {
            root = LayoutInflater.from(mContext).inflate(R.layout.shop_item_adapter, parent,
                    false);
        }
        return new MyRecycleAdapterHolder(root, viewType);
    }

    /**
     * 添加自定义头部
     */
    public void addHeadView(View view) {
        this.headView = view;
    }

    @Override
    public int getItemViewType(int position) {

        if (position == 0) {
            return ShopFragment.HEADER_RECYCLER_VIEW_ITEM;
        } else {
            return ShopFragment.NORMAL_RECYCLER_VIEW_ITEM;
        }
    }

    private OnImageClickListener mOnImageClickListener;

    public void setOnItemClickListener(OnImageClickListener listener) {
        mOnImageClickListener = listener;
    }

    public interface OnImageClickListener {
        void onClick();
    }

}

代码中定义尺寸
businessRecycler.addItemDecoration(new GridSpacingItemDecoration(4, getResources().getDimensionPixelSize(R.dimen.y4), true));
getResources().getDimensionPixelSize(R.dimen.y4)
是资源文件里的尺寸

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值