我有一个交错的网格,有2列。这是有效的。我想要的是位置0,这样行才能跨越2列。我以前已经很容易地使用GridLayoutManger做到了这一点:
mGridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return position == 0 ? 2 : 1;
}
});与GridLayoutManager不同,StaggeredGridLayoutManager不能为我提供此功能。
有没有不同的方法呢?我已经搜索过,但没有找到任何有相同问题的人,这是令人惊讶的,因为当ProgressBar显示在RecyclerView的最后一行时,我认为这个功能对于我的场景和无限滚动非常有用。
发布于 2015-11-14 19:28:24
您可以使用setFullSpan方法。
这样,项目将使用所有跨度区域进行布局。
这意味着,如果方向是垂直的,视图将是全宽的;如果方向是水平的,则视图将是全高的。
如下所示:
public final void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();
layoutParams.setFullSpan(true);
}注意了。
它支持跨所有列的视图,但对于您的情况应该足够了。
发布于 2020-11-03 18:13:40
对于任何使用Kotlin的人。
在onBindViewHolder中使用isFullSpan是可行的。
override fun onBindViewHolder(holder: LoadStateViewHolder, loadState: LoadState) {
holder.bind(loadState)
val layoutParams = holder.itemView.layoutParams as StaggeredGridLayoutManager.LayoutParams
layoutParams.isFullSpan = true
}发布于 2020-03-07 17:54:23
正如@Daniele Segato所说,
由于ViewHolder不应更改,并且我们必须保持onBindViewHolder精简,因此最好在onCreateViewHolder方法中设置isFullSpan参数。此LayoutParamter用于父视图,即RecylcerView,以决定如何布局子视图。
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
https://stackoverflow.com/questions/33696096
复制相似问题