Como alterar o viewType de um item do RecyclerView ao clicar

Eu criei um RecyclerView com cartões como seu principal tipo de exibição. O que estou tentando conseguir é que, quando o usuário clica em um item, o ViewType desse item é alterado de cartões para outro Viewtype (por exemplo, uma lista de visualizações de texto colocadas horizontalmente com rolagem).

Meu código para o RecyclerView Adapter é o seguinte:

No trecho de código abaixo, eu criei uma lista de array de tipos de enum para acompanhar o estado clicado de cada linha na reciclerview, depois obtive o tamanho do meu conjunto de dados e inicializei minha lista de arrays para cada linha com 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);
    }
}

Abaixo está minha classe ViewHolder, que contém referências a todas as minhas visualizações filho, ela implementa View.OnClickListener. Por que ele implementa o View.OnClickListener é para que ele possa alternar entre os estados clicados para alterar os viewTypes de acordo.

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);
    }
}

É aqui que estou obtendo o valor de viewType retornado por getItemViewType e retornando o layout inflado

@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);
    }
}

Então, aqui estou ligando as visualizações com valores de acordo com o viewType retornado pelo 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();
}

E, finalmente, minha lógica getItemViewType

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

O que eu não conseguia entender é que por que não aparece nada quando executo o código? Tudo parece válido para mim. Ajude-me !!!!

questionAnswers(3)

yourAnswerToTheQuestion