Reputation: 591
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.
Upvotes: 1
Views: 594
Reputation: 591
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());
}
}
Upvotes: 1