es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Elemento del recycler view desapareciendo.

Tengo un problema con el recycler view. Implementé una lógica de colapso como se puede ver en el código de abajo. Pero cuando cierro el segundo elemento, la vista desaparece como se puede ver en el video (link). ¿Qué estoy haciendo mal? Por favor, ayuda. Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la visibilidad del linearLayout en el RecyclerView.ViewHolder. Cuando cierras el segundo elemento, el linearLayout se establece en View.GONE. Por lo tanto, cuando desplazas hacia arriba y hacia abajo, la vista no es visible.

    Para solucionar este problema, puedes intentar establecer la visibilidad del linearLayout en View.INVISIBLE en lugar de View.GONE. De esta manera, la vista seguirá ocupando espacio en el RecyclerView, pero no será visible para el usuario.

    Puedes modificar tu método onCreateViewHolder de la siguiente manera:

    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    
        View v = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.report_layout, viewGroup, false);
    
        final ReportHolder holder = new ReportHolder(v);
    
        // ocultar la mitad de la vista
        holder.linearLayout.setVisibility(View.INVISIBLE);
    
        holder.tvPrintReceipt.setVisibility(View.INVISIBLE);
    
        holder.tvClose.setOnClickListener(v1 -> {
            TransitionManager.beginDelayedTransition(viewGroup, new AutoTransition());
            holder.linearLayout.setVisibility(View.INVISIBLE);
            holder.tvViewRecords.setVisibility(View.VISIBLE);
        });
    
        holder.tvViewRecords.setOnClickListener(v2 ->{
            TransitionManager.beginDelayedTransition(viewGroup, new AutoTransition());
            holder.linearLayout.setVisibility(View.VISIBLE);
            holder.tvViewRecords.setVisibility(View.GONE);
        });
    
        return holder;
    }
    

    Esto debería evitar que la vista desaparezca cuando te desplaces hacia arriba y hacia abajo.

    ¡Espero que esto te ayude! Déjame saber si tienes alguna otra pregunta.

Comments are closed.