2016-02-01 63 views
1

我一直沒能找到任何關於它的帖子...如何從RecyclerView的ItemDecoration類訪問LayoutManager?

我們有良好的老RecyclerView.ItemDecoration碼(從Suleiman's Mansonry Github project拍攝):

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; 
    } 
} 

我想有套mSpace條件(抵消/保證金),取決於RecyclerView中的當前LayoutManager

例如:

if(/* LayoutManager is LinearLayoutManager*/){ 
    //Set larger margin 
}else{ 
    //Set lower margin 
} 

回答

0

所以...因爲我是重讀的問題,檢查是否有任何失蹤,我意識到,你實際上得到一個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 
} 
相關問題