Cómo cambiar el tipo de vista de un elemento RecyclerView en Haga clic

He creado un RecyclerView con tarjetas como su tipo de vista principal. Lo que estoy tratando de lograr es que cuando el usuario hace clic en un elemento, el tipo de vista de ese elemento cambia de tarjetas a otro tipo de vista (por ejemplo, una vista de texto de lista colocada horizontalmente desplazable).

Mi código para el adaptador RecyclerView es el siguiente:

En el siguiente código, he creado una lista de tipos de enumeración para realizar un seguimiento del estado en el que se hizo clic en cada fila en la vista de reciclaje, luego obtuve el tamaño de mi conjunto de datos e inicialicé mi lista de listas para cada fila con 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);
    }
}

A continuación se muestra mi clase ViewHolder que contiene referencias a todas mis vistas secundarias, Implementa View.OnClickListener. El motivo por el que implementa View.OnClickListener es para que pueda alternar entre los estados en los que se hizo clic para cambiar viewTypes en consecuencia.

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

Aquí es donde obtengo el valor de viewType devuelto por getItemViewType y devolviendo el diseño 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);
    }
}

Luego, aquí estoy vinculando las vistas con valores de acuerdo con el tipo de vista devuelto por 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();
}

Y finalmente mi lógica getItemViewType

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

Lo que no pude entender es por qué no se muestra nada cuando ejecuto el código ... Todo me parece válido. Ayuadame !!!!

Respuestas a la pregunta(3)

Su respuesta a la pregunta