Saltar al contenido

¿Cómo ocultar un artículo de la vista Recycler en una condición particular?

Solución:

En algunos casos, cambiar solo el atributo de visibilidad podría terminar como espacio en blanco asignado (debido al relleno de la vista principal, márgenes, elementos internos, etc.). Luego, cambiar la altura de la vista principal ayuda:

holder.itemView.setVisibility(View.GONE); 
holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(0, 0));

Luego, asegúrese de que, en la condición de que sea visible, también configure:

holder.itemView.setVisibility(View.VISIBLE);
holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));

Debe hacer eso porque el viewHolder se recicla a medida que se desplaza, si cambia las propiedades como esta y nunca las devuelve a su estado natural, otros elementos ya estarán ocultos en caso de que reutilicen la misma vista.

Debe ocultar todas las vistas o los elementos principales del formato XML de UsersViewholder. Debes ocultar todo el visor o cada vista.

Todo el espectador:

itemView.setVisibility(View.GONE);

o cada elemento:

view.setVisibility(View.GONE);

Pero no olvides configurarlos VISIBLE De lo contrario, terminarás con algunas cosas extrañas del reciclaje.

SI

view.setVisibility(View.GONE);

te da una vista en blanco

Entonces sigue esto.

public static class Data_ViewHolder extends RecyclerView.ViewHolder {
    private final LinearLayout layout;
    final LinearLayout.LayoutParams params;

    public Show_Chat_ViewHolder(final View itemView) {
        super(itemView);
        .
        .
        .
        layout =(LinearLayout)itemView.findViewById(R.id.show_item_layout);
        params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT);
        .
        .
        .
    }

    private void Layout_hide() {
        params.height = 0;
        //itemView.setLayoutParams(params); //This One.
        layout.setLayoutParams(params);   //Or This one.

    }
  }

Ahora llama desde Adaptador

mFirebaseAdapter = new FirebaseRecyclerAdapte......{
public void populateViewHolder.....{

if(model.getData().equals("..Something.."))
  {
      viewHolder.Layout_hide();
  }
else
      viewHolder.Person_Email(model.getEmail());
   }
 }
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *