Как сделать заказ с помощью StaggeredGridLayoutManager - PullRequest
0 голосов
/ 17 марта 2020

Я создаю сетку, как вы можете видеть на изображении ниже.

Список ввода: {"Position 0", "Position 1", "Position 2", "Position 3", "Position 4 ", .....}

enter image description here

Проблема в том, что мне нужно меню с двумя типами компонентов.

small -> Позиция 0 на изображении

Огромный -> Позиция 2 на изображении

Итак, когда мой адаптер создан элемент из позиции 4 , он не в порядке.

Ожидаемый результат:

Позиция 1, Позиция 2, Позиция 3

Позиция 4, Позиция 5, Позиция 6

public class SampleRecyclerViewAdapter extends RecyclerView.Adapter<SampleViewHolders> {
private List<ItemObject> itemList;
private Context context;

public SampleRecyclerViewAdapter(Context context,
                                 List<ItemObject> itemList) {
    this.itemList = itemList;
    this.context = context;
}

@Override
public SampleViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
    View layoutView = LayoutInflater.from(parent.getContext()).inflate(
            R.layout.book_list_item, null);
    SampleViewHolders rcv = new SampleViewHolders(layoutView);
    return rcv;
}

@Override
public void onBindViewHolder(SampleViewHolders holder, int position) {
    holder.bookName.setText(itemList.get(position).getName()  + position);

    if (position % 2 == 0) {
        holder.itemView.setMinimumHeight(250);
    } else {
        holder.itemView.setMinimumHeight(300);
    }
}

@Override
public int getItemCount() {
    return this.itemList.size();
}

}

1 Ответ

1 голос
/ 17 марта 2020

вы должны добавить слушателя для размера поиска

mGridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
  @Override
   public int getSpanSize(int position) {
    return //do your logic here
  }
});

, если вы хотите добавить счетчик промежутков

GridLayoutManager gridLayoutManager = new GridLayoutManager(this, //count);
...