为什么Textview不是每次都更新数据?

时间:2018-04-04 19:40:13

标签: android textview

我尝试从db获取文字,然后更新我textView课程recyclerView adapter中的文字。虽然我从db获得text没有任何问题,但我textview每次都没有更新文本。有时它会更新,有时我不知道问题是什么。我试图引用很多SO个问题,但没有一个可以解决我的问题。我甚至尝试使用textView.invalidate(),但没有用。有谁可以帮我解决这个问题。

代码:

  @Override
public void onBindViewHolder( CustomRecyclerViewHolder holder, int position) {
JSONObject ov=new JSONObject();

            try {
                ov.put("prof_email",timelineData.getEmail());
                socket.disconnect();
                socket.connect();
                socket.emit("data",ov);

                socket.on("name_full", new Emitter.Listener() {
                    @Override
                    public void call(Object... args) {
                        final JSONObject ob = (JSONObject)args[0];
                        try {

                            final String st = ob.getString("fullname");


                            Needle.onMainThread().execute(new Runnable() {
                                @Override
                                public void run() {
                                    if (st.length() > 0) {
                                        //I'm toasting just to test that text is alright or not but it's alright
                                        Toast.makeText(context,st,Toast.LENGTH_SHORT).show();
                                        holder.userName.invalidate();//here not useful
                                        holder.userName.setText(st);
                                        holder.userName.invalidate();//even here also not useful
                                        socket.disconnect();
                                    }
                                }
                            });

                        }catch (Exception e){
                            e.printStackTrace();
                        }


                    }
                });
            } catch (JSONException e) {
                e.printStackTrace();
            }
          }

1 个答案:

答案 0 :(得分:0)

每次用户滚动recyclerview时都会调用OnBindViewHolder。 因此,对应于您的源代码,当用户滚动列表时,套接字连接和断开连接会多次完成。 (这似乎不是一个好方法) 所以我建议从onBindViewHolder中删除与套接字相关的代码。 之后只是听插座。更改数据后,将旧数据替换为集合中的新数据,并调用Adapter#notifyDatasetChanged()。