Для достижения нужного вам значения необходимо переопределить getItemViewType(position)
на RecyclerView.Adapter
, где вы вернете int
, в котором указывается, какой вид будет использоваться для представления этой позиции.
Далее вы создадите разные ViewHolders
на createViewHolder (parent,viewType)
, которые будут содержать ссылки на каждый отдельный CardLayout в вашем случае.
После этого на bindViewHolder(holder, position)
вы можете создать оператор switch или если что-нибудь еще, чтобы просмотреть список возможных видов и заполнить их данными.
Пример кода ниже:
public GeneralViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
GeneralViewHolder holder;
View v;
Context context = viewGroup.getContext();
if (viewType == FIRST_TYPE) {
v = LayoutInflater.from(context)
.inflate(R.layout.first_card, viewGroup, false);
holder = new FirstTypeViewHolder(v); //Of type GeneralViewHolder
} else {
v = LayoutInflater.from(context)
.inflate(R.layout.second_card, viewGroup, false);
holder = new SecondTypeViewHolder(v);
}
return holder;
}
public void onBindViewHolder(GeneralViewHolder viewHolder, int i) {
if(getItemViewType(i)==FIRST_TYPE) {
FirstTypeViewHolder holder1 = (FirstTypeViewHolder)viewHolder;
} else {
SecondTypeViewHolder holder1 = (SecondTypeViewHolder)viewHolder;
}
}
public int getItemViewType (int position) {
//Some logic to know which type will come next;
return Math.random()<0.5 ? FIRST_TYPE : SECOND_TYPE;
}
https://developer.android.com/training/material/lists-cards.html. И для разных макетов просто измените ViewType на вашем адаптере. –
@PedroOliveira. Я уже читал это, но он показывает только, как это было с одной картой, а не с разными. – safari
Вам нужно переопределить 'getItemViewType' на вашем адаптере и вернуть другой вид, чтобы вы могли раздувать различные макеты на вашем' onCreateViewHolder' (который получает тип представления как параметр 2º). –