Как передать данные из 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;
}