我试图在listView
中加载基于日期的自定义callLogs作为节头。在ListAdapter
中,我将每个日期与上一个日期进行比较,并设置SectionHeaderLayout
可见/不可见。加载ListView
后,节标题会正确显示,但当我滚动时,节标题设置为Visible(可见)为错误的ListItems
。
请帮我想出一个解决办法。
这就是我试图通过adapter
设置SectionHeader
的方式。
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);
}
提前感谢
我知道这是一个老问题,你可能已经解决了你的问题,但我会为其他有同样问题的人回答。
若你们想显示基于上一个日期的标题,你们不能通过记住传递给getView函数的最后一个项目来实现。原因是滚动,即上下方向不同。例如,如果您有项目1.2.3.4.5
当你往下走时,当前项是3,上一项是2,一切都会好起来的。但如果你要上升,你之前的3项实际上是4项,这就是你的问题发生的地方。
所以你不应该保留项目,而应该使用位置。
这将是您可以在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);
}
}