0

J'ai configuré une application qui remplit une vue de recyclage en utilisant des informations provenant d'une base de données SQL, par exemple. dates et heures etc ... J'ai récemment mis en place une petite section qui soit afficher ou masquer un textview selon si le textview ci-dessus est le même ou non. Par exemple, il peuplera la première Textview du 13/06/2017 et la rendra visible, si la prochaine date à afficher est la même, il masquera simplement la textview permettant à plusieurs résultats avec la même date de s'empiler sous l'autre.Visibilité de la vue textuelle Android avec vue de recyclage

Problème Mon code fonctionne comme il devrait être et empiler correctement. Le problème que j'ai est que lorsque je fais défiler la page vers le haut et vers le haut tous les en-têtes disparaissent. Cela est dû au fait que je n'ai pas correctement configuré mon viewHolder. Pourriez-vous éventuellement me donner des indications sur la situation?

Bind Voir

code permettant l'empilement de dupliquer plusieurs résultats

if (position - 1 >= 0) { 

String currentDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date")); 

cursor.moveToPosition(position - 1); 

String previousDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date")); 


Log.i("storedDates", currentDate);  

if (currentDate.equalsIgnoreCase(previousDate)) { 

txtHeader.setVisibility(View.GONE); 
cardView.setVisibility(View.GONE); 

} else { 


txtHeader.setVisibility(View.VISIBLE); 
txtHeader.setText(currentDate); 

} 

} else { 

txtHeader.setVisibility(View.VISIBLE); 
txtHeader.setText(cursor.getString(cursor.getColumnIndexOrThrow("complete_date"))); 
} 

Démarrer ViewHolder

public static class Viewholder extends RecyclerView.ViewHolder{ 

    TextView header; 
    public Viewholder(View itemView) { 
     super(itemView); 

     header = (TextView) itemView.findViewById(R.id.txtHeader); 
    } 
} 

OncreateViewholder et OnBindViewHolder

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View view = mCursorAdapter.newView(mContext,mCursorAdapter.getCursor(), parent); 

    return new Viewholder(view); 



} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 

    mCursorAdapter.getCursor().moveToPosition(position); 




    mCursorAdapter.bindView(holder.itemView, mContext, mCursorAdapter.getCursor()); 

} 






@Override 
public int getItemCount() { 
    return mCursorAdapter.getCount(); 
} 

Toutes les suggestions sont appréciés

+0

Utilisez le modèle de classe et de tenir les données pour cacher et voir. – Amy

+0

Donc votre dicton pour stocker la visibilité de la textview dans modal droite? Mais comment l'information serait-elle transmise au modèle et onclick ne se produit pas? – Steven

+0

Qu'est-ce que cardView dans votre code est-il une partie en-tête? – Pavan

Répondre

0

Il vous manque Vignettes visibilité donc où vous mettre txtHeader visibilité également mis en Vignettes visibilité

if (position - 1 >= 0) { 

     String currentDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date")); 

     cursor.moveToPosition(position - 1); 

     String previousDate = cursor.getString(cursor.getColumnIndexOrThrow("complete_date")); 


     Log.i("storedDates", currentDate);  

     if (currentDate.equalsIgnoreCase(previousDate)) { 

      txtHeader.setVisibility(View.GONE); 
      cardView.setVisibility(View.GONE); 

     } else { 

      cardView.setVisibility(View.VISIBLE); 
      txtHeader.setVisibility(View.VISIBLE); 
      txtHeader.setText(currentDate); 

     } 

    } else { 
     cardView.setVisibility(View.VISIBLE); 
     txtHeader.setVisibility(View.VISIBLE); 
    txtHeader.setText(cursor.getString(cursor.getColumnIndexOrThrow("complete_date"))); 
    }