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 № 1Je 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);
}
}