Добавленные элементы recyclerView не отображаются до тех пор, пока пользователь не прокрутит список. Я использую websockets для связи. Когда пользователь на сервере отправляет сообщение, сервер возвращает json, который я разбираю для модели, и добавляю его в адаптер recycliewiew. Элемент добавляется в recyclerview, но он не отображается, пока я не прокручу recyclerview вверх или вниз. Я сделал тест, где я добавил статическую строку с тестом Json, и когда я нажимаю на кнопку, он запускает тот же метод, но с тестовыми данными за пределами websocket, и он добавляет элемент поверх recyclerview.RecyclerView: добавленные элементы, не показывающие
Добавлены элементы с помощью этого метода не не отображаются до пользователя свитка:
WebSocket ws = factory.createSocket("wss://example.com/websocket");
ws.addListener(new WebSocketAdapter() {
@Override
public void onTextMessage(WebSocket websocket, String text) throws Exception {
adapter.add(parseWs(text);
}
});
private Discussion parseWs(String string) {
discussion = new JSONObject(string).getJSONObject("data").toString();
Gson gson = new Gson();
return gson.fromJson(discussion, Discussion.class);
}
////////////Adapter class////////////
public void add(Discussion disc) {
list.add(0,disc);
notifyItemInserted(0);
}
Если я добавить элемент из нажав на кнопку, элементы показываются нормально без прокрутки:
fab.setOnClickListener(v ->
adapter.add(parseWs(test));
mRecyclerView.scrollToPosition(0);
);
Я m, используя java-библиотеку nv-weboskcet-client.
Этот метод разбивает анимацию, и я уведомил адаптер, что я добавил элемент, вы можете увидеть его в коде – mayyo
Вы пробовали его с классом Handler для обновления вашего представления? Потому что кажется, что WebSocket обрабатывает сообщения в другом потоке. – Monarchis
Похоже, вы правы, websocket создает отдельный поток из пользовательского интерфейса, поэтому я попытаюсь использовать Handler для обновления интерфейса. Есть ли возможность использовать метод синхронного подключения с RxJava? – mayyo