как передать данные из recyclerView в адаптер для динамического макета - PullRequest
0 голосов
/ 12 ноября 2018

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

вот мой снимок here is my snapshot

вот моя форма кода, которую я получаю. 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;
}

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

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018
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;
    }
0 голосов
/ 12 ноября 2018

создайте свой адаптер следующим образом

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 для создания соответствующего представления.

...