Нужно создать вертикальный список элементов с одним элементом, в котором элементым в горизонтальном положении. Поэтому нужно использовать два recyclerViewAdapter, но проблема в не понимании этого. Каким образом это делается?
Уже есть вертикальный adapter
public class ProductsAdapter extends RecyclerView.Adapter
@NonNull
private List
public ProductsAdapter(@NonNull List
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
switch (viewType){
case ProductsType.TITLE:
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_title_products, parent, false);
return new TitleVH(view);
case ProductsType.DEPOSIT:
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_deposits_products, parent, false);
return new DepositVH(view);
case ProductsType.CREDIT:
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_credits_products, parent, false);
return new CreditVH(view);
case ProductsType.DEBIT_CARD:
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_debitcards_products, parent, false);
return new DebitCardVH(view);
case ProductsType.CREDIT_CARD:
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_creditcards_products, parent, false);
return new CreditCardVH(view);
}
return null;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
holder.itemView.setTag(position);
BaseProductsItem item = baseProductsItems.get(position);
if (item instanceof TitleProductsItem) {
TitleVH titleVH = (TitleVH) holder;
TitleProductsItem titleItem = (TitleProductsItem) item;
titleVH.tvTitle.setText(null);
} else if (item instanceof DepositsProductsItem) {
DepositVH depositVH = (DepositVH) holder;
DepositsProductsItem depositItem = (DepositsProductsItem) item;
depositVH.tvNameDeposits.setText(null);
depositVH.tvOpenedDeposits.setText(null);
depositVH.tvAmountDeposits.setText(null);
} else if (item instanceof CreditsProductsItem) {
CreditVH creditVH = (CreditVH) holder;
CreditsProductsItem creditItem = (CreditsProductsItem) item;
creditVH.tvNameCredits.setText(null);
creditVH.tvNextPaymentDateCredits.setText(null);
creditVH.tvNextPaymentAmountCredits.setText(null);
creditVH.tvAmountCredits.setText(null);
} else if (item instanceof DebitCardsProductsItem) {
DebitCardVH debitCardVH = (DebitCardVH) holder;
DebitCardsProductsItem cardItem = (DebitCardsProductsItem) item;
debitCardVH.tvDebitCardsNumber.setText(null);
debitCardVH.tvDebitCardsName.setText(null);
debitCardVH.tvDebitCardsAmount.setText(null);
} else if (item instanceof CreditCardsProductsItem) {
CreditCardVH creditCardVH = (CreditCardVH) holder;
CreditCardsProductsItem cardItem = (CreditCardsProductsItem) item;
creditCardVH.tvCreditCardsNumber.setText(null);
creditCardVH.tvCreditCardsName.setText(null);
creditCardVH.tvCreditCardsAmount.setText(null);
}
}
public static class TitleVH extends RecyclerView.ViewHolder {
@BindView(R.id.tvTitle) TextView tvTitle;
public TitleVH(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public static class AccountVH extends RecyclerView.ViewHolder {
public AccountVH(View itemView) {
super(itemView);
}
}
public static class DepositVH extends RecyclerView.ViewHolder {
@BindView(R.id.tvNameDeposits) TextView tvNameDeposits;
@BindView(R.id.tvOpenedDeposits) TextView tvOpenedDeposits;
@BindView(R.id.tvAmountDeposits) TextView tvAmountDeposits;
public DepositVH(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public static class CreditVH extends RecyclerView.ViewHolder {
@BindView(R.id.tvNameCredits) TextView tvNameCredits;
@BindView(R.id.tvNextPaymentDateCredits) TextView tvNextPaymentDateCredits;
@BindView(R.id.tvNextPaymentAmountCredits) TextView tvNextPaymentAmountCredits;
@BindView(R.id.tvAmountCredits) TextView tvAmountCredits;
public CreditVH(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public static class DebitCardVH extends RecyclerView.ViewHolder {
@BindView(R.id.tvDebitCardsName) TextView tvDebitCardsName;
@BindView(R.id.tvDebitCardsNumber) TextView tvDebitCardsNumber;
@BindView(R.id.tvDebitCardsAmount) TextView tvDebitCardsAmount;
public DebitCardVH(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public static class CreditCardVH extends RecyclerView.ViewHolder {
@BindView(R.id.tvCreditCardsName) TextView tvCreditCardsName;
@BindView(R.id.tvCreditCardsNumber) TextView tvCreditCardsNumber;
@BindView(R.id.tvCreditCardsAmount) TextView tvCreditCardsAmount;
public CreditCardVH(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
@Override
public int getItemCount() {
return baseProductsItems.size();
}
@Override
public int getItemViewType(int position) {
BaseProductsItem item = baseProductsItems.get(position);
if (item instanceof DepositsProductsItem)
return ProductsType.DEPOSIT;
else if (item instanceof CreditsProductsItem)
return ProductsType.CREDIT;
else if (item instanceof DebitCardsProductsItem)
return ProductsType.DEBIT_CARD;
else if (item instanceof CreditCardsProductsItem)
return ProductsType.CREDIT_CARD;
else if (item instanceof TitleProductsItem)
return ProductsType.TITLE;
else return 0;
}
}
Ответ
Почитал ваш код, надеюсь это stackoverflow сжал его в один файл) Все так же, как и раньше, но теперь во ViewHolder инициализирован RecyclerView. Для него вы создаете новый адаптер и новый вьюхолдер. Такая модель с легкостью работает и живет, если данные внутри RecyclerView не кликабельны, т.е. просто для отображения. Другой вопрос, когда вам нужно обрабатывать клики по по внутреннему RecyclerView, с изменением общих данных. Отсюда у вас два путя: либо хранить адаптеры для каждого внутреннего RecyclerView, либо вытягивать данные из ViewHodler-a.
Вариант второй - это реализовать внутренний RecyclerView в отдельной фрагменте. Тогда вы сможете полностью разделить логику двух RecyclerView, но это опять-таки все зависит от задачи.
Первый вариант я реализовывал для кастомного календаря, где месяцы скрлились горизонтально, а внутренний RecyclerView был месяцем с днями.
Комментариев нет:
Отправить комментарий