Привет, ребята, я создаю приложение для Android, которое содержит модуль обмена сообщениями. В этом модуле обмена сообщениями я хочу отображать дату таким образом, чтобы сообщения с той же датой находились в связке ниже определенной даты, так же, как там показаны WhatsApp и Telegram.дата сообщения
попытался найти эту проблему, но было трудно найти правильное рабочее решение, потому что я получаю сообщения из локальной базы данных sqlite как ORDER в DESC, чтобы сначала получить последнее сообщение, а затемустановка моего linearlayoumanager ReverseLayout в true (LayoutManager.ReverseLayout (true)) и stackFromEnd также в true, чтобы последнее сообщение находилось в нижнем элементе в recyclerview. Большинство решений, которые я получаю, имеют обратную форму, дата приходит в первый деньвхождение, а не вхождение последней даты, которое является последним сообщением, а не поступает при последнем изменении даты
Извлечение из sqlite:
SQLiteDatabase sqLiteDatabase=myDbHelper.getWritableDatabase();
String rowQuery="SELECT " +
Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE+", "+
Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE_ID+", "+
Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE_PHONE_SENDER+", "+
Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE_PHONE_RECIEVER+", "+
Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE_DELEVERY_STATUS+", "+
Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE_TAG+", "+
Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE_TIME_STAMP+", "+
Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE_CONVERSATION_ID+", "+
Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE_TEXT_TYPE+", "+
Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE_IS_DOWNLOADED+", "+
Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE_TINY_FILE+", "+
Database_Creation.MESSAGE_FILE_TABLE+"."+Database_Creation.MESSAGE_File_NAME+", "+
Database_Creation.MESSAGE_FILE_TABLE+"."+Database_Creation.MESSAGE_FIle_SYNC_STATUS+", "+
Database_Creation.MESSAGE_FILE_TABLE+"."+Database_Creation.MESSAGE_FILE_MIME_TYPE+", "+
Database_Creation.MESSAGE_FILE_TABLE+"."+Database_Creation.MESSAGE_FIle_DELETED_STATUS+", "+
Database_Creation.MESSAGE_FILE_TABLE+"."+Database_Creation.MESSAGE_File_THUMBNAIL+", "+
Database_Creation.MESSAGE_FILE_TABLE+"."+Database_Creation.MESSAGE_FILE_ORIGINAL_NAME+", "+
Database_Creation.MESSAGE_TABLE_FUNCTIONS+"."+Database_Creation.MESSAGE_FUNTION_MESSAGE_ID_REFRENCE+", "+
Database_Creation.MESSAGE_TABLE_FUNCTIONS+"."+Database_Creation.MESSAGE_FUNTION+
" FROM "+Database_Creation.MESSAGES_TABLE+
" LEFT JOIN "+Database_Creation.MESSAGE_FILE_TABLE+" ON "+Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE_ID+" = "+Database_Creation.MESSAGE_FILE_TABLE+"."+Database_Creation.MESSAGE_FILE_MESSAGE_ID+
" LEFT JOIN "+Database_Creation.MESSAGE_TABLE_FUNCTIONS+" ON "+Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE_ID+" = "+Database_Creation.MESSAGE_TABLE_FUNCTIONS+"."+Database_Creation.MESSAGE_FUNTION_MESSAGE_ID+
" WHERE "+Database_Creation.MESSAGE_CONVERSATION_ID+"=? "
+"ORDER BY "+Database_Creation.MESSAGES_TABLE+"."+Database_Creation.MESSAGE_TIME_STAMP+" DESC" +
" LIMIT "+offset+","+itemcount;
recyclerver layoutmanager
linearLayoutManager.setInitialPrefetchItemCount(2);
rv_messages.setLayoutManager(linearLayoutManager);
rv_messages.setHasFixedSize(true);
rv_messages.setNestedScrollingEnabled(false);
endlessScrollListener=new EndlessScrollListener(linearLayoutManager) {
@Override
public void onLoadMore(int page, int totalItemsCount, RecyclerView view) {
Log.d(TAG,"new pag no:"+page);
//populate_messages_add(conversation_id,page);
}
};
rv_messages.addOnScrollListener(endlessScrollListener)
метод для генерациидата:
private void processDate(@NonNull TextView tv, String dateAPIStr
, String dateAPICompareStr
, boolean isFirstItem) {
SimpleDateFormat f = new SimpleDateFormat("dd MMM yy");
if (isFirstItem) {
//first item always got date/today to shows
//and overkill to compare with next item flow
Date dateFromAPI = null;
try {
dateFromAPI = f.parse(dateAPIStr);
if (DateUtils.isToday(dateFromAPI.getTime())) tv.setText("today");
else if (DateUtils.isToday(dateFromAPI.getTime() + DateUtils.DAY_IN_MILLIS)) tv.setText("yesterday");
else tv.setText(dateAPIStr);
tv.setIncludeFontPadding(false);
tv.setVisibility(View.VISIBLE);
} catch (ParseException e) {
e.printStackTrace();
tv.setVisibility(View.GONE);
}
} else {
Log.d(TAG,"dateAPIStr:"+dateAPIStr+" dateAPICompareStr:"+dateAPICompareStr);
if (!dateAPIStr.equalsIgnoreCase(dateAPICompareStr) || tv.getText()==null) {
try {
Date dateFromAPI = f.parse(dateAPIStr);
// if (DateUtils.isToday(dateFromAPI.getTime())) tv.setText("today");
// else if (DateUtils.isToday(dateFromAPI.getTime() + DateUtils.DAY_IN_MILLIS)) tv.setText("yesterday");
tv.setText(dateAPIStr);
tv.setIncludeFontPadding(false);
tv.setVisibility(View.VISIBLE);
} catch (ParseException e) {
e.printStackTrace();
tv.setVisibility(View.GONE);
}
} else {
tv.setVisibility(View.GONE);
//}
}
}
ожидаемый результат должен выглядеть следующим образом: 
это так:

ожидается группировка даты сообщений сверху вниз, но вместо этого группирует их снизу вверх