0

RecyclerViewを実装しましたが、最初の3つの要素の後にカスタムビュー/行を追加したいので、私は立ち往生しています(GirdLayoutManager) (青い部分)以下 参照イメージ:GridLayoutManagerを使用したRecyclerViewのカスタムビュー/ロー

enter image description here

どのように私はそれを達成することができますか?何か案は?ありがとう!

+0

チェックこのhttps://guides.codepath.com/android/Heterogenous-Layouts -inside-RecyclerView –

答えて

2

以下のようなあなたのグリッドレイアウトマネージャを設定します。その後、

final GridLayoutManager mng_layout = new GridLayoutManager(this.getActivity(), 2); 

mng_layout.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
      @Override 
      public int getSpanSize(int position) { 
       switch(recyclerAdapter.getItemViewType(position)) { 
        case MyRecyclerAdapter.TYPE_SINGLE: 
         return 1; 
        case MyRecyclerAdapter.TYPE_DEFAULT: 
         return 2; 
        default: 
         return -1; 
       } 
      } 
     }); 
myRecyclerView.setLayoutManager(mng_layout); 

そして、あなたのRecyclerViewAdapterは、以下のように更新します。

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = null; 
    if (viewType==TYPE_DEFAULT) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.product_grid_view_item, parent, false); 
     return new DefaultViewHolder(view); 
    } else if (viewType==TYPE_SINGLE){ 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.product_grid_view_header, parent, false); 
     return new SingleItemViewHolder(view); 
    } 
    throw new RuntimeException("There is no type that matches the type " + viewType + " + make sure your using types correctly"); 
} 

@Override 
public int getItemViewType(int position) { 
    return (list.get(position).getType()==TYPE_DEFAULT) ? TYPE_DEFAULT : TYPE_SINGLE; 
} 
+0

それは動作します!そのような簡単な解決策。ありがとうございます<3 – Ziga

+0

お手伝いします。それを正しい答えとして受け入れてください。投票矢印の下にあるアイコンをクリックしてください。 – nnn

関連する問題