GridLayoutManager
всегда учит RecyclerView
рисовать слева направо и сверху вниз.Масштаб по умолчанию для этого вида является вертикальным (или горизонтальным).Он не может рассчитать, сколько строк должно отображаться в этом динамическом случае.У меня есть решение для вас.Однако не следует придерживаться этой бизнес-логики.
Все, что вам нужно, - это один адаптер с двумя типами представлений и простая логика для индексации нужной вещи.Код образца:
public class SampleAdapter extends RecyclerView.Adapter<ViewHolder> {
private final Context context;
private List<Integer> listLeft;
private List<Integer> listRight;
public SampleAdapter (Context context) {
this.context = context;
}
public void setListLeft(List<Integer> list) {
this.listLeft = list;
}
public void setListRight(List<Integer> list) {
this.listRight = list;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.sample, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
int index = position / 2; // assumes there are two lists of equal lengths
int viewType = getItemViewType(position);
if (viewType == TYPE_1) {
holder.textView.setText(listLeft.get(index).toString());
} else if (viewType == TYPE_2) {
holder.textView.setText(listRight.get(index).toString());
}
}
@Override
public int getItemCount() {
return listLeft.size() + listRight.size();
}
@Override
public int getItemViewType(int position) {
return position % 2 == 0 ? VIEW_TYPE_1 : VIEW_TYPE_2;
}
}