recyclerview设置行数_ByRecyclerView多布局:实现列数不同效果

本文介绍如何使用ByRecyclerView实现多布局,并动态控制列数。通过创建不同的ViewHolder和GridLayoutManager,使得第一项占据一列,后续项占据两列,从而达到定制化的列表显示效果。
摘要由CSDN通过智能技术生成

1.先看效果图bf5ac1ecc570f721192c5c4b7f45da18.png

2.分析首页布局

备注:标题栏吸顶效果先忽略,如果想了解滑动吸顶效果,可以去我的首页查看其他文章(酷炫吸顶效果)

a.首先,整个布局是一个ByRecyclerView

b.ByRecyclerView实现多布局

c.顶部的轮播图和分类按钮,是ByRecyclerView的第一项

d.下面才是真正的列表数据d904d050535748c813581c8b9cc8477b.png

适配器中代码,分类部分:

//根据条件返回条目的类型

@Override

public int getItemViewType(int position) {

if (position == 0) {

return ITEM_TYPE_1;

} else {

return ITEM_TYPE_2;

}

}

@NonNull

@Override

public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

RecyclerView.ViewHolder holder = null;

//如果条目的类型等于1,加载轮播图,否则加载文章列表

if (i == ITEM_TYPE_1) {

View viewTop = LayoutInflater.from(activity).inflate(R.layout.home_tab, viewGroup, false);

if (holder == null) {

holder = new BannnerViewHolder(viewTop);

}

} else if (i == ITEM_TYPE_2) {

View view = LayoutInflater.from(activity).inflate(R.layout.item_layout_like1, viewGroup, false);

/**

* 用此方法margin无效果

*/

// View view = LayoutInflater.from(activity).inflate(R.layout.item_layout_like1, null);

if (holder == null) {

holder = new ArticleViewHolder(view);

}

}

return holder;

}

复制代码

3.为ByRecyclerView添加适配器

可以看到,recyclerView被设置为2列

GridLayoutManager manager = new GridLayoutManager(getActivity(), 2);

recyclerView.setLayoutManager(manager);

homeLikeAdapter = new HomeAdapter3(activity);

homeLikeAdapter.setHasStableIds(true);

recyclerView.setAdapter(homeLikeAdapter);

复制代码

4.那么如何让position=0的第一项,可以占独占一列呢,重点来咯:

/**

* 解决recyclerview多布局,动态控制列数

* 第一个item是1列,后面都是2列

*/

manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {

@Override

public int getSpanSize(int position) {

int spanSize;

if (homeLikeAdapter.getItemViewType(position) == HomeAdapter1.ITEM_TYPE_1) {

spanSize = 2;//跨2列

} else if (homeLikeAdapter.getItemViewType(position) == HomeAdapter1.ITEM_TYPE_2) {

spanSize = 1;//跨1列

} else {

spanSize = 2;

}

return spanSize;

}

});

复制代码

为了让单篇文章的篇幅简单,我会一个个问题独立出来写哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值