У меня был дизайн, необходимый для реализации, как изображение Top на изображении, а внизу есть GridView
с двумя coloumns. Поэтому я планирую реализовать его с помощью RecyclerView
. Для начала мне нужно использовать LinearLayoutManager
, а снизу - GridLayoutManager
. Итак, как я могу создать адаптер Recycler с этими двумя значениями.Как добавить LinearLayout Manager и GridLayout Manager в RecyclerView в Android
ответ
Предполагая, что вы знаете, как создать 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);
Что такое MyAdapter здесь, в случае – Mohtashim
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
}
Надеюсь, что это поможет!
Использовать GridLayoutManager с помощью spanSizeLookUp? –