When I called adapter.addToStart(), incoming messages were never shown in messages list, but when I scroll this list to bottom, messages appear. Outcoming messages appear correctly, but not always, it's absolutely random, but when keyboard dissapears, they appear always. So, we tried to call addToStart like this:
@Override
public void onTextMessage(WebSocket websocket, final String message) {
Log.d("ChatFragment", message);
//По идее postDelayed быть не должно, но оно без него очень странно скроллит, а так все ок.
messagesList.postDelayed(new Runnable() {
@Override
public void run() {
MsgGson msg = gson.fromJson(message, MsgGson.class);
msg.setChatId(Integer.valueOf(chatId));
msg.save();
if(msg.getSender() == userId){
Log.d("ChatFragment", "msg outcoming");
messagesListAdapter.addToStart(new MsgChatKit(msg, self), true);
} else {
Log.d("ChatFragment", "msg incoming");
messagesListAdapter.addToStart(new MsgChatKit(msg, mate), true);
}
}
}, 300);
}
And it works!
На англ. мб не очень грамотно пишу, продублирую, чтобы была ясна суть вопроса. Мы использовали MessagesList, сообщения приходят на вебсокет, в OnTextMessage мы делаем код, который внутри run выше. Если сообщение входящее, то список с сообщениями не прокручивается и сообщения не видно, пока пальцем не проскроллишь их вниз. Исходящие иногда отображаются, иногда нет. Если потыкать по разным частя экрана, в тексте повыделять че нибудь, потыкать на одну, на другую вьюху, показать убрать клаву, то скроллинг может поломаться и работать также как с входящими, причем, иногда, если клавиатуру убрать показать, то оно снова работает. Долго не могли понять почему так, и тупо установка задержки в 300мс решила проблему.