0

Я успешно реализовал RecyclerView с использованием GirdLayoutManager (обычная реализация, ничего особенного), но теперь я застреваю, потому что хочу добавить пользовательский вид/строку после первых трех элементов. См изображение ниже (синяя область):Пользовательский вид/строка в RecyclerView с GridLayoutManager

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