简体   繁体   中英

How to create whatsapp like message stack(First all chat screen)

I am working on android chat application, In which i want to show newly arrived message block to the top of recyclerview like whatsapp does. whatsapp show new message to top and push all other chat block stack to the down.

I have done something in which i am able to show the new message chat block to top but not able to push other chat block to down.

Here is my code:

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);

截屏

here block having count 11 is new message stack hide/override other user chat and below to that count 8 message block is old. other chat block is replaced with new chat block with 11 count. I did all possibilities but no result.

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();
 }

and here is my comparator class:

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());
}


}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM