Ответ 1
Чтобы достичь желаемого, вам необходимо переопределить 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;
}