我正在开发聊天应用程序,我已经设计了虚拟聊天历史记录。但我仍然坚持如何根据日期对邮件进行分组,当我们向下滚动时,日期指示器会粘在最高位置,就像什么应用程序。你能告诉我的方式,我怎样才能实现这一目标?我在下面附上了一些截图来阐述我的问题。
答案 0 :(得分:5)
将标题放在自定义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);
<强>更新强>
到目前为止,最简单的方法是在每个项目中嵌入日期标题视图。然后,您需要在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)