Как создать список заголовка раздела, как whatsapp?
Я разрабатываю приложение для чата и уже разработал фиктивную историю чата.Но я застрял на том, как группировать сообщения в соответствии с датой, и когда мы прокручиваем его вниз, индикатор даты застревает в верхней позиции, как и приложение whats. вы можете просто показать мне путь, как я могу этого достичь? Я прикрепил ниже скриншот, чтобы уточнить свой вопрос.
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); }