首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建类似whatsapp的消息堆栈(首先是聊天屏幕)

如何创建类似whatsapp的消息堆栈(首先是聊天屏幕)
EN

Stack Overflow用户
提问于 2019-04-04 13:09:13
回答 1查看 304关注 0票数 1

我正在开发android聊天应用程序,我想像whatsapp一样将新到达的消息块显示到回收视图的顶部。whatsapp将新消息显示在顶部,并将所有其他聊天块堆栈推到下。

我已经做了一些事情,我可以显示新的消息聊天块的顶部,但不能推动其他聊天块向下。

这是我的代码:

代码语言:javascript
复制
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);

这里,具有count 11的块是新消息堆栈,隐藏/覆盖其他用户聊天,在此下面是计数8,消息块是旧的。其他聊天块被替换为具有11计数的新聊天块。我做了所有可能的事,但没有结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-05 12:04:41

代码语言:javascript
复制
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();
 }

这是我的比较器类:

代码语言:javascript
复制
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());
}


}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55516824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档