Как создать список заголовка раздела, как whatsapp?


Я разрабатываю приложение для чата и уже разработал фиктивную историю чата.Но я застрял на том, как группировать сообщения в соответствии с датой, и когда мы прокручиваем его вниз, индикатор даты застревает в верхней позиции, как и приложение whats. вы можете просто показать мне путь, как я могу этого достичь? Я прикрепил ниже скриншот, чтобы уточнить свой вопрос.

![Введите описание изображения здесь

3 2

3 ответа:

Видеть это изображение

Поместите заголовок в пользовательский макет адаптера 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);
    }

Проверьте эту ссылку: http://stacktips.com/tutorials/android/listview-with-section-header-in-android

Я надеюсь, что это поможет вам

Просто. Просто добавьте представление заголовка в свой 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);
}