如何创建像whatsapp这样的节头列表?

时间:2016-10-28 06:02:18

标签: android whatsapp

我正在开发聊天应用程序,我已经设计了虚拟聊天历史记录。但我仍然坚持如何根据日期对邮件进行分组,当我们向下滚动时,日期指示器会粘在最高位置,就像什么应用程序。你能告诉我的方式,我怎样才能实现这一目标?我在下面附上了一些截图来阐述我的问题。

![enter image description here

3 个答案:

答案 0 :(得分:5)

See this image

将标题放在自定义lisview适配器布局中,并在每次当前消息日期和上一个消息日期时进行检查。如果日期相同,则隐藏您的标题,否则显示您的标题。见下文:

 holder.tvDate.setText(chatMessage.getDate());
    if (position > 0) {
        if (chatMessages.get(position).getDate().equalsIgnoreCase(chatMessages.get(position - 1).getDate())) {
            holder.header.setVisibility(View.GONE);
        } else {
            holder.header.setVisibility(View.VISIBLE);
        }
    } else {
        holder.header.setVisibility(View.VISIBLE);
    }

答案 1 :(得分:0)

简单。只需将标题视图添加到ListView

即可
TextView textView = new TextView(context);
textView.setText("Hello. I'm a header view");

listView.addHeaderView(textView);

了解更多详情 - https://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View)

<强>更新

到目前为止,最简单的方法是在每个项目中嵌入日期标题视图。然后,您需要在bindView中执行的操作是将上一行的日期与此行的日期进行比较,并隐藏日期(如果它相同)。像这样:

String thisDate = cursor.getString(dateIndex);
String prevDate = null;

// get previous item's date, for comparison
if (cursor.getPosition() > 0 && cursor.moveToPrevious()) {
    prevDate = cursor.getString(dateIndex);
    cursor.moveToNext();
}

// enable section heading if it's the first one, or 
// different from the previous one
if (prevDate == null || !prevDate.equals(thisDate)) {
    dateSectionHeaderView.setVisibility(View.VISIBLE);
} else {
    dateSectionHeaderView.setVisibility(View.GONE);
}

答案 2 :(得分:0)