Как изменить viewType элемента RecyclerView на клике

Я создал RecyclerView с картами в качестве основного вида. Я пытаюсь добиться того, чтобы, когда пользователь щелкает элемент, тип представления этого элемента изменяется с карточек на другой тип просмотра (например, список текстовых представлений, размещаемых с горизонтальной прокруткой).

Мой код для RecyclerView Adapter выглядит следующим образом:

В приведенном ниже фрагменте кода я создал arrraylist перечислимых типов, чтобы отслеживать состояние щелчка каждой строки в представлении реселлера, затем я получил размер моего набора данных и инициализировал мой массив для каждой строки с помощью SHOW_PRIMARY_CONTENT

public class DisplayItemsAdapter extends RecyclerView.Adapter<DisplayItemsAdapter.ViewHolder> {

private static ArrayList<clickedState> itemClickedState;
private enum clickedState {
    SHOW_PRIMARY_CONTENT,
    SHOW_SECONDARY_CONTENT
}

private ArrayList<ItemData> mDataset = new ArrayList<>();

public DisplayItemsAdapter(ArrayList<ItemData> dataset) {
    mDataset = dataset;
    itemClickedState = new ArrayList<>();
    for (int i = 0; i < mDataset.size(); i++) {
        itemClickedState.add(i, clickedState.SHOW_PRIMARY_CONTENT);
    }
}

Ниже мой класс ViewHolder, который содержит ссылки на все мои дочерние представления, он реализует View.OnClickListener. Почему он реализует View.OnClickListener так, что он может переключаться между состояниями щелчка, чтобы соответственно изменить viewTypes.

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView tvItemName;
    TextView tvItemNumber;

    public ViewHolder(View itemView) {
        super(itemView);

        tvItemName = (TextView) itemView.findViewById(R.id.tvItemName);
        tvItemNumber = (TextView) itemView.findViewById(R.id.tvItemNumber);

        tvTicketClass = (TextView) itemView.findViewById(R.id.tvTicketClass);
    }

    @Override
    public void onClick(View v) {
        itemClickedState.add(getAdapterPosition(), clickedState.SHOW_SECONDARY_CONTENT);
    }
}

Вот где я получаю значение viewType, возвращаемое getItemViewType, и возвращаю раздутый макет

@Override
public DisplayItemsAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
    View v1 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.display_Items_row, viewGroup, false);
    View v2 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.display_Items_ticket_class, viewGroup, false);
    if (viewType == 0) {
        return new ViewHolder(v1);
    } else {
        return new ViewHolder(v2);
    }
}

Затем здесь я связываю представления со значениями в соответствии с viewType, возвращаемым viewholderusing viewholder.getItemViewType

@Override
public void onBindViewHolder(DisplayItemsAdapter.ViewHolder viewHolder, final int position) {
    if (viewHolder.getItemViewType() == 0) {
        viewHolder.tvItemName.setText(mDataset.get(position).strItemName);
        viewHolder.tvItemNumber.setText(mDataset.get(position).strItemNumber);
    } else if (viewHolder.getItemViewType() == 1) {
        for (int i = 0; i < mDataset.get(position).strClass.length; i++) {
            viewHolder.tvTicketClass.setText(mDataset.get(position).strClass[i]);
        }
    }
}

@Override
public int getItemCount() {
    return mDataset.size();
}

И, наконец, моя логика getItemViewType

@Override
public int getItemViewType(int position) {
    if (itemClickedState.get(position) == clickedState.SHOW_SECONDARY_CONTENT)
        return 1;
    return 0;
}
}

То, что я не мог понять, это то, что почему-то не показывать, когда я запускаю код ,,, Все мне кажется действительным. Помоги мне !!!!

Ответы на вопрос(3)

Ваш ответ на вопрос