【问题标题】:RecyclerView : added items not showingRecyclerView:添加的项目不显示
【发布时间】:2016-06-16 11:26:08
【问题描述】:

添加到 recyclerView 的项目在用户滚动之前不会显示。我正在使用 websockets 进行通信。当服务器上的用户发送消息时,服务器返回我正在解析的 json 模型并将其添加到 recyclerview 适配器。项目已添加到 recyclerview,但在我向上或向下滚动 recyclerview 之前它不会显示。我做了一个测试,我在其中添加了带有测试 Json 的静态字符串,当我单击一个按钮时,它会触发相同的方法,但在 websocket 之外使用测试数据,它会在 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 库。

【问题讨论】:

    标签: android json android-recyclerview java-websocket


    【解决方案1】:

    不确定你到底想要什么,但尝试使用

    notifyDataSetChanged();
    

    希望这能解决您的问题。

    如果调用是异步的,您必须使用 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);
            });
        }
    });
    

    类似的东西应该可以工作:)

    您可能必须将 Handler handler 声明为 Activity 中的字段。

    【讨论】:

    • 这个方法会破坏动画,并且我通知适配器我添加了项目,你可以在代码中看到它
    • 您是否尝试过使用 Handler 类来更新您的视图?因为看起来 WebSocket 在另一个线程中处理消息。
    • 看来你是对的,websocket从UI创建了一个单独的线程,所以我会尝试使用Handler来更新UI。是否有任何选项可以在 RxJava 中使用同步连接方法?
    猜你喜欢
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多