2

我使用GridLayoutManager與2個單元格和一些單元格我想跨度爲一個,所以我嘗試使用setSpanSizeLookup,但它不工作。我試過爲所有位置返回1,但仍然出現兩個單元而不是一個。GridLayoutManager setSpanSizeLookup不工作

以下是我的代碼

gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
     @Override 
     public int getSpanSize(int position) { 
      return 1; 
     } 
    }); 
    recyclerView.setLayoutManager(gridLayoutManager); 

爲什麼它不工作的任何原因?

回答

3

更換

return 1; 

return 2; 

這說明你是企業跨越式2個細胞轉化爲1個細胞。

代碼

這裏是我的企業跨越式2細胞對特定位置

GridLayoutManager glm=new GridLayoutManager(mContext,2); 
glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
     @Override 
     public int getSpanSize(int position) { 
      switch(categoryAdapter.getItemViewType(position)) { 
       case 1: 
        return 2; 
       default: 
        return 1; 
      } 
     } 
    }); 
    mRecyclerViewCategory.setLayoutManager(glm); 

如何在回收站適配器定義的情況下跨度

@Override 
public int getItemViewType(int position) { 
    if(position==[your_specific_postion_where_to_span]){ 
     return 1; 
    } 
    return super.getItemViewType(position); 
} 
+0

我想是在即使使用2個跨度和和奇數位置1個跨度位置,但兩個跨度只得到一個被示出和離開網格空間用於第二列只有空!如果條件應該是'if(position%2!= 0){return 1};'其餘的代碼與上面的 –

+0

@ NaszNjokaSr.just修改'getItemViewType'跨越所有奇數位置的1列 –

+0

相同,我們希望所有職位的行爲都不是特定的 –

0

我掙扎代碼這是因爲這裏的文檔很差。我想這是這樣的...

getSpanSize和getSpanIndex似乎一起工作。對我來說,我試圖在一個gridlayoutManager中插入一個pageViewer,該列表生成了兩列。所以有人喜歡定義:mGridLayout = new GridLayoutManager(getActivity(), 2);

//must be called before setLayoutManager is invoked 
private void setNumOfColumnsForPageViewer(final FallCollectionRecyclerAdapter adapter) { 

    mGridLayout.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
     @Override 
     public int getSpanSize(int position) { 
      if (adapter.getItemViewType(position) == MyRecyclerAdapter.TYPE_PAGE_VIEWER) 
       return 2; //some other form of item like a header, or whatever you need two spans for 
      else 
       return 1; //normal item which will take up the normal span you defined in the gridlayoutmanager constructor 
     } 

     @Override 
     public int getSpanIndex(int position, int spanCount) { 
      if (adapter.getItemViewType(position) == FallCollectionRecyclerAdapter.TYPE_PAGE_VIEWER) 
       return 1;//use a single span 
      else 
       return 2; //use two spans 
     } 
    }); 

    mRecyclerView.setLayoutManager(mGridLayout); 
}