以日期作为节标题的ListView在Scroll上的位置不同



我试图在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);
    }
}

相关内容

  • 没有找到相关文章

最新更新