2016-10-28 72 views
1

我正在开发聊天应用程序,我已经设计了虚拟聊天记录。但我坚持如何根据它的日期来分组消息,当我们向下滚动时,日期指示器就像最新的应用程序一样贴在顶部位置。你能告诉我方式,我怎么能做到这一点?我附上了一些截图来详细说明我的问题。如何创建类似whatsapp的节标题列表?

![enter image description here

回答

1

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); 
    } 
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); 
} 
+0

,你可以看到上面的截图,有不止一个头的昨天,今天和列表视图中只包含一个头@saurav –

+0

看到最后的编辑。它可能会帮助你 –

相关问题