首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在StaggeredGridLayoutManager中设置单行跨度大小

在StaggeredGridLayoutManager中设置单行跨度大小
EN

Stack Overflow用户
提问于 2015-11-13 23:24:27
回答 3查看 22.7K关注 0票数 38

我有一个交错的网格,有2列。这是有效的。我想要的是位置0,这样行才能跨越2列。我以前已经很容易地使用GridLayoutManger做到了这一点:

代码语言:javascript
复制
                mGridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                    @Override
                    public int getSpanSize(int position) {
                        return position == 0 ? 2 : 1;
                    }
                });

与GridLayoutManager不同,StaggeredGridLayoutManager不能为我提供此功能。

有没有不同的方法呢?我已经搜索过,但没有找到任何有相同问题的人,这是令人惊讶的,因为当ProgressBar显示在RecyclerView的最后一行时,我认为这个功能对于我的场景和无限滚动非常有用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-14 19:28:24

您可以使用setFullSpan方法。

这样,项目将使用所有跨度区域进行布局。

这意味着,如果方向是垂直的,视图将是全宽的;如果方向是水平的,则视图将是全高的。

如下所示:

代码语言:javascript
复制
public final void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {

    StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();
    layoutParams.setFullSpan(true);
}

注意了。

它支持跨所有列的视图,但对于您的情况应该足够了。

票数 98
EN

Stack Overflow用户

发布于 2020-11-03 18:13:40

对于任何使用Kotlin的人。

onBindViewHolder中使用isFullSpan是可行的。

代码语言:javascript
复制
override fun onBindViewHolder(holder: LoadStateViewHolder, loadState: LoadState) {
        holder.bind(loadState)
        val layoutParams = holder.itemView.layoutParams as StaggeredGridLayoutManager.LayoutParams
        layoutParams.isFullSpan = true
    }
票数 2
EN

Stack Overflow用户

发布于 2020-03-07 17:54:23

正如@Daniele Segato所说,

由于ViewHolder不应更改,并且我们必须保持onBindViewHolder精简,因此最好在onCreateViewHolder方法中设置isFullSpan参数。此LayoutParamter用于父视图,即RecylcerView,以决定如何布局子视图。

代码语言:javascript
复制
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StaggeredProductCardViewHolder {
    var isFullSpan = false
    var layoutId = R.layout.shr_staggered_product_card_first
    if (viewType == 1) {
        layoutId = R.layout.shr_staggered_product_card_second
    } else if (viewType == 2) {
        layoutId = R.layout.shr_staggered_product_card_third
        isFullSpan = true

    }

    val layoutView = LayoutInflater.from(parent.context).inflate(layoutId, parent, false)
    (layoutView.layoutParams as StaggeredGridLayoutManager.LayoutParams).isFullSpan= isFullSpan
    return StaggeredProductCardViewHolder(layoutView)
}

Final Result: Don't use gridLayoutManger's SpanCoutLookUp Method

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33696096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档