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