2016-03-14 3 views
3

У меня был дизайн, необходимый для реализации, как изображение Top на изображении, а внизу есть GridView с двумя coloumns. Поэтому я планирую реализовать его с помощью RecyclerView. Для начала мне нужно использовать LinearLayoutManager, а снизу - GridLayoutManager. Итак, как я могу создать адаптер Recycler с этими двумя значениями.Как добавить LinearLayout Manager и GridLayout Manager в RecyclerView в Android

+0

Использовать GridLayoutManager с помощью spanSizeLookUp? –

ответ

10

Предполагая, что вы знаете, как создать RecyclerView адаптер с несколькими типами зрения, это то, как вы определяете менеджер компоновки для recyclerview

mAdapter = new MyMultiViewAdapter(); // an imaginary adapter that supports multiple view types 

mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

GridLayoutManager glm = new GridLayoutManager(this, 2); 
glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
      @Override 
      public int getSpanSize(int position) { 
       switch(mAdapter.getItemViewType(position)){ 
        case MyAdapter.TYPE_HEADER: 
         return 2; 
        case MyAdapter.TYPE_ITEM: 
         return 1; 
        default: 
         return -1; 
       } 
      } 
     }); 

mRecyclerView.setLayoutManager(glm); 
mRecyclerView.setAdapter(mAdapter); 
+0

Что такое MyAdapter здесь, в случае – Mohtashim

2

RecyclerView принимает один менеджер компоновки. Поэтому для достижения необходимого вам потребуется использовать GridLayoutManager.

Размер пролета будет равен 2, чтобы получить два столбца. Затем вы должны использовать setSpanSizeLookup, чтобы отметить первый элемент, охватывающий оба столбца. В этом представлении вы разместите свое «Топ-изображение».

public boolean isHeader(int position) { 
    return position == 0; 
} 

GridLayoutManager manager = new GridLayoutManager(this, 2); 
manager.setSpanSizeLookup(new SpanSizeLookup() { 
    @Override 
    public int getSpanSize(int position) { 
     return isHeader(position) ? 2 : 1; 
    } 
}); 
recyclerView.setLayoutManager(manager); 

Затем onCreateViewHolder может вернуть другой держатель вид в зависимости от типа элемента в этом положении.

@Override 
public int getItemViewType(int position) { 
    return isHeader(position) ? VIEW_TYPE_HEADER : VIEW_TYPE_ITEM; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    if (viewType == VIEW_TYPE_HEADER) { 
     // Setup header view holder 
     return new HeaderViewHolder(...); 
    } 
    // Setup item view holder 
    return new ItemViewHolder(...) 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    if (isHeader(position)) { 
     return; 
    } 
    // Bind item to the item view holder 
} 

Надеюсь, что это поможет!