[英]How to access LayoutManager from RecyclerView.Adapter to get scrollToPosition?
[英]How to access the LayoutManager from the RecyclerView's ItemDecoration class?
我找不到任何关于它的帖子...
我们有旧的RecyclerView.ItemDecoration代码(摘自Suleiman的Mansonry Github项目 ):
public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
private final int mSpace;
public SpacesItemDecoration(int space) {
this.mSpace = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.left = mSpace;
outRect.right = mSpace;
outRect.bottom = mSpace;
// Add top margin only for the first item to avoid double space between items
if (parent.getChildAdapterPosition(view) == 0)
outRect.top = mSpace;
}
}
我想根据RecyclerView中的当前LayoutManager设置mSpace
(偏移/边距)的条件。
例如:
if(/* LayoutManager is LinearLayoutManager*/){
//Set larger margin
}else{
//Set lower margin
}
所以...当我重新阅读该问题以检查是否缺少任何内容时,我意识到您实际上获得了RecyclerView引用(父级)作为getItemOffsets()的参数。
因此,您只需从函数内部调用parent.getLayoutManager()
。
例:
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
if (parent.getLayoutManager() instanceof LinearLayoutManager){
margin = 2;
}else if (parent.getLayoutManager() instanceof StaggeredGridLayoutManager){
margin = 1;
}else{
margin = 0;
}
//Do magic
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.