recyclerViewにアイテムを追加しました。ユーザーがスクロールするまで表示されません。私は通信にウェブソケットを使用しています。サーバー上のユーザーがメッセージを送信すると、サーバーはモデル化するために解析しているJSONを返し、それをrecyclerviewアダプターに追加します。アイテムはrecyclerviewに追加されますが、私はrecyclerviewをスクロールアップするまで表示されません。テストJsonで静的Stringを追加したテストを行いました。ボタンをクリックすると、同じメソッドがトリガーされますが、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);
);
私は」 nv-weboskcet-client Javaライブラリを使用しています。あなたがexactlty欲しいもの確かに、これはあなたの問題を解決します可能性があり
notifyDataSetChanged();
使用しようとしない
このメソッドはアニメーションを中断し、アイテムを追加したことをアダプターに通知しました。コードで確認できます – mayyo
ビューを更新するためにHandlerクラスで試しましたか?なぜなら、WebSocketは別のスレッドのメッセージを処理するように思えるからです。 – Monarchis
あなたが正しいかのようですが、websocketはUIから別のスレッドを作成するので、UIを更新するためにHandlerを使用しようとします。 RxJavaで同期接続メソッドを使用するオプションはありますか? – mayyo