我正在开发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);

这里,具有count 11的块是新消息堆栈,隐藏/覆盖其他用户聊天,在此下面是计数8,消息块是旧的。其他聊天块被替换为具有11计数的新聊天块。我做了所有可能的事,但没有结果。
发布于 2019-04-05 12:04:41
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());
}
}https://stackoverflow.com/questions/55516824
复制相似问题