Как создать WhatsApp, как стек сообщений (сначала весь экран чата) - PullRequest
1 голос
/ 04 апреля 2019

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

Я сделал что-то, в результате чего я могу показать новый блок чата сообщений вверх, но не могу толкнуть другой блок чата вниз.

Вот мой код:

int readindex = 0;

for (int i = 0; i < messageStackDtoList.size(); i++) {
    Log.d("iiiiiiiiii",messageStackDtoList.get(i).getMessageId());
    Log.d("iiiiiiiiii",latestObject.getString("messageId"));
    if (messageStackDtoList.get(i).getMessageId().equals(latestObject.getString("messageId"))) {

        readindex = i;
        Toast.makeText(getActivity(),messageStackDtoList.get(i).getMessage(),Toast.LENGTH_SHORT).show();
        break;
    }
}



messageStackDtoList.set(readindex, new MessageStackDto(latestObject.getString("threadId"), latestObject.getString("messageId"), latestObject.getString("sender"), latestObject.getString("senderId"), latestObject.getString("receiverId"), latestObject.getInt("messageStatus"), latestObject.getString("receiver"), latestObject.getString("message"), latestObject.getString("type"), latestObject.getString("audioUrl"), latestObject.getString("date"), outputData.getInt("newMsgCount"), null));

messageStackAdapter.notifyItemChanged(readindex);

Screenshot

здесь блок, имеющий количество 11, является новым стеком сообщений, скрывающим / переопределяющим другой пользовательский чат, и ниже этого количества 8 блок сообщений является старым. другой блок чата заменяется новым блоком чата с 11 отсчетом. Я сделал все возможности, но безрезультатно.

1 Ответ

1 голос
/ 05 апреля 2019
try {

for (int i = 0; i < messageStackDtoList.size(); i++) {
Log.d("From message list::::::", messageStackDtoList.get(i).getThreadId());
Log.d("new data::::::::", outputData.getString("threadID"));
if (messageStackDtoList.get(i).getThreadId().equals(outputData.getString("threadID"))) {


    Log.d("Contact already present", messageStackDtoList.get(i).getMessage() + "");

    messageStackDtoList.set(i, new MessageStackDto(latestObject.getString("threadId"), latestObject.getString("messageId"), latestObject.getString("sender"), latestObject.getString("senderId"), latestObject.getString("receiverId"), latestObject.getInt("messageStatus"), latestObject.getString("receiver"), latestObject.getString("message"), latestObject.getString("type"), latestObject.getString("audioUrl"), latestObject.getString("date"), outputData.getInt("newMsgCount"), null));
    messageStackAdapter.notifyItemChanged(i);
    messageStackDtoList.sort(new CustomComparator());
    messageStackAdapter.notifyDataSetChanged();
    break;
}
 }

for (MessageStackDto messageStackDto : messageStackDtoList) {
if (!messageStackDto.getThreadId().equals(outputData.getString("threadID"))) {
    Log.d("I","Not Present");
    isNewContact = false;
} else {
    Log.d("I","Present");
    isNewContact=true;
    break;
}
                                            }

if(!isNewContact){
MessageStackDto audioMessageStackDto = new MessageStackDto(latestObject.getString("threadId"), latestObject.getString("messageId"), latestObject.getString("sender"), latestObject.getString("senderId"), latestObject.getString("receiverId"), latestObject.getInt("messageStatus"), latestObject.getString("receiver"), latestObject.getString("message"), latestObject.getString("type"), latestObject.getString("audioUrl"), latestObject.getString("date"), outputData.getInt("newMsgCount"), null);
messageStackDtoList.add(audioMessageStackDto);
messageStackDtoList.sort(new CustomComparator());
messageStackAdapter.notifyDataSetChanged();
 }


 } catch (IndexOutOfBoundsException e) {    e.printStackTrace();

} catch (Exception e) {
   e.printStackTrace();
 }

и вот мой класс компаратора:

package in.demo.androidchatdemo.Comparator;

import java.util.Comparator;

import in.demo.androidchatdemo.Dto.MessageStackDto;


public class CustomComparator implements Comparator<MessageStackDto> {

@Override


public int compare(MessageStackDto o1, MessageStackDto o2) {

    try {

//    System.out.println(o1.getLatestMsg().get(0).getDate());

        return o1.getDate().compareTo(o2.getDate()) * (-1);

    } catch (Exception e) {
        e.printStackTrace();
    }


   // System.out.println(o1.getNewMessages().get(0).getDate().compareTo(o2.getNewMessages().get(0).getDate()));

    return o1.getDate().compareTo(o2.getDate());
}


}
...