具有日期作为节标题位置的ListView在滚动上有所不同

时间:2014-04-09 09:51:52

标签: android listview sectionheader

我尝试根据日期作为部分标题在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);
        }

先谢谢

1 个答案:

答案 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);
    }

}