Мне нужно в зависимости от типа объекта(записи), заполнить RecyclerView разными view, раньше когда я делал это с помощью ListView у меня получалось, а тут я даже не знаю как это организовать, в onCreateViewHolder сразу создается view но без учета текущей позиции, следовательно я не могу несколько разных view там создать. Как это можно организовать?
Ответ Для создания айтемов разного вида необходимо переопределить метод адаптера getItemViewType(), который будет в зависимости от условия определять, айтем какого вида требуется в данной позиции. В RecyclerView этот механизм был улучшен и метод onCreateViewHolder() возвращает значение ViewType - какой тип айтема требуется в данной позиции: class MyAdapter extends RecyclerView.Adapter { private final int TYPE_ITEM1 = 0 private final int TYPE_ITEM2 = 1 public MyAdapter () { // конструктор адаптера } @Override public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v switch (viewType) { // инфлейтим нужную разметку в зависимости от того, // какой тип айтема нужен в данной позиции case TYPE_ITEM1: v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item1, parent, false) break case TYPE_ITEM2: v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item2, parent, false) } return new ItemHolder(v) } @Override public void onBindViewHolder( ItemHolder holder, int position) { // Получаем тип айтема в данной позиции для заполнения его данными int type = getItemViewType(position) switch (type) { case TYPE_ITEM1: holder.mText1.setText("биндим данные в айтем типа 1") break case TYPE_ITEM2: holder.mText2.setText("биндим данные в айтем типа 2") break } } @Override public int getItemViewType(int position) { // условие для определения айтем какого типа выводить в конкретной позиции if (position == <условие>) return TYPE_ITEM1 return TYPE_ITEM2 } public static class ItemHolder extends RecyclerView.ViewHolder{ TextView mText1 TextView mText2 public ItemHolder(View v) { super(v) mText1 = (TextView) v.findViewById(R.id.text1) mText2 = (TextView) v.findViewById(R.id.text2) } }