2016-06-16 34 views
1

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(); 

使用しようとしない

答えて

0

呼び出しが非同期の場合、Handlerクラスを使用してビューを更新する必要があります。

AndroidとJavaRx:

https://mttkay.github.io/blog/2013/08/25/functional-reactive-programming-on-android-with-rxjava/

しかし、単にHandlerクラスでそれを試してみてください。

Handler handler = new Handler(); 
ws.addListener(new WebSocketAdapter() { 
    @Override 
    public void onTextMessage(WebSocket websocket, String text) throws Exception { 
     handler.post(new Runnable(){ 
      adapter.add(parseWs(text); 
     }); 
    } 
}); 

そのような何か作業をする必要があります:)

を、あなたの活動の場としてハンドラハンドラを宣言する必要があります。

+0

このメソッドはアニメーションを中断し、アイテムを追加したことをアダプターに通知しました。コードで確認できます – mayyo

+0

ビューを更新するためにHandlerクラスで試しましたか?なぜなら、WebSocketは別のスレッドのメッセージを処理するように思えるからです。 – Monarchis

+0

あなたが正しいかのようですが、websocketはUIから別のスレッドを作成するので、UIを更新するためにHandlerを使用しようとします。 RxJavaで同期接続メソッドを使用するオプションはありますか? – mayyo

関連する問題