Как передать данные из recyclerView в адаптер для динамического макета

Я делаю динамический recyclerView с несколькими макетами. Я сделал 3-4 макета, который должен динамически меняться в соответствии с идентификатором типа стиля. Теперь я получаю Id стиля в RicklerView и как я могу передать это значение адаптеру.

вот мой снимоквот мой снимок

вот моя форма кода, которую я получаю Id стиля:

int StyleTypeId = object.getInt("StyleTypeID");

вот мой код адаптера:

@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = null;
    if (viewType == 1) {
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rv_electronic_category, parent, false);
    }else if (viewType == 2){
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rv_latest_product, parent, false);
    }
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    if (holder.getItemViewType() == 1){
        holder.setData(products.get(position));
    }else if (holder.getItemViewType() == 2) {
        holder.setLatestProductData(products.get(position));
    }
}
@Override
public int getItemViewType(int position) {
    return 2;
}

моя проблема заключается в том, как я могу передать идентификатор типа стиля из объекта JSON во время выполнения адаптера

2 ответа

Создать свой адаптер, как это

int StyleTypeId = object.getInt("StyleTypeID");
YourAdapter adapter = new YourAdapter(StyleTypeId);

затем внутри вашего адаптера

class YourAdapter extends RecyclerView.Adapter<YourViewHolder> {
    private int styledId;
    YourAdapter(int styleId) { this.styleId = styleId; }
}

и в onCreateViewHolder() вы можете использовать styleId для создания соответствующего представления.

int StyleTypeId = object.getInt("StyleTypeID");
X adapter = new X(StyleTypeId);

тогда ваш класс адаптера добавит следующий фрагмент:

private int viewType;
        X(int styleId) { this.viewType = styleId; }

В методе getItemViewType верните ваш тип представления вместо статической переменной

 @Override
    public int getItemViewType(int position) {
        return viewType;
    }
Другие вопросы по тегам