/ / ListView avec la date en tant que position des en-têtes de section varie onScroll - Android, listview, sectionheader

ListView avec la date à laquelle la position des en-têtes de section varie selon Scroll - Android, ListView, Section Header

J'essaie de charger des journaux d'appels personnalisés dans un listView basé sur la date comme en-tête de section.In ListAdapter je compare chaque date avec la date précédente et je règle SectionHeaderLayout Visible/Invisible. Quand le ListView a été chargé, les en-têtes de section s'affichent correctement mais lorsque je fais défiler les en-têtes de section sont définis Visible sur faux ListItems.

Merci de m'aider à trouver une solution.

C'est comme ça que j'essaye de régler SectionHeader à travers le adapter.

    if (position == 0) {

checkDate = mDateStr;
holder.sectionHeaderDate.setVisibility(View.VISIBLE);
holder.sectionHeaderText.setText(mDateStr);
}
} else if (checkDate == null || !checkDate.equals(mDateStr)) {

checkDate = mDateStr;
holder.sectionHeaderDate.setVisibility(View.VISIBLE);
holder.sectionHeaderText.setText(mDateStr);

} else {
holder.sectionHeaderDate.setVisibility(View.GONE);
}

Merci d'avance

Réponses:

0 pour la réponse № 1

Je vois que c'est une vieille question, vous avez probablement résolu votre problème, mais je répondrai pour d'autres qui auront le même problème.

Si vous souhaitez afficher l'en-tête en fonction de la date précédentevous ne pouvez pas le faire en vous souvenant du dernier élément passé à la fonction getView. La raison en est le défilement, c'est-à-dire la direction différente lors de la montée et de la descente. Par exemple, si vous avez des articles 1, 2, 3, 4, 5

lorsque vous descendez, et que l'élément actuel est 3, le précédent était 2, et tout fonctionnera. Mais si vous montez, votre élément précédent pour 3 était en fait 4, et c'est là que votre problème se produit.

donc au lieu de garder l'article, vous devriez utiliser des positions.

ce serait l'esquisse de la solution que vous pouvez appeler à l'intérieur de votre fonction getView :

private void showHeader(ViewHolder holder, Call item, int position) {

boolean shouldShowHeader = false;
if (position == 0
|| !DateHelper.isSameDay(item.getDateTime(),
items.get(position - 1).getDateTime()))
shouldShowHeader = true;

if (shouldShowHeader) {
holder.header.setVisibility(View.VISIBLE);
holder.date.setText(DateHelper.getSimpleDate(item.getDateTime()));
} else {
holder.header.setVisibility(View.GONE);
}

}