我尝试根据日期作为部分标题在listView
中加载自定义callLog。在ListAdapter
中,我将每个日期与上一个日期进行比较,并设置SectionHeaderLayout
可见/不可见。加载ListView
后,部分标题会正确显示,但当我滚动部分标题时,设置为可见错误ListItems
。
请帮我找出解决方案。
这是我尝试通过SectionHeader
设置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);
}
先谢谢
答案 0 :(得分:0)
我认为这是一个老问题,你可能已经解决了你的问题,但我会回答那些会遇到同样问题的人。
如果你想根据以前的日期显示标题,你可以通过记住传递给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);
}
}