如题。
出现场景:
送礼物的界面一个gridview 显示不同礼物item,每送出去一个,对应要更新展示的金币余额。
在一个fragment里面调用控件的setText()的时候,偶尔不起作用或者明显延后,但是此时打印的getText()值确实对的。
但是第一次进入加载是没有问题,退出重新进入却没有生效,或是过了3-4S 更久才生效。
之前是猜测主线程受阻,处理的事物太多(确实如此)。
参考http://blog.csdn.net/u011131296/article/details/42495129
在处理比较复杂的逻辑的时候,有时候setText之后而且确实保证里面是有值的,但是也不能保证页面就一定能够显示出来该值!settext仅仅是赋值而已,真正界面上的改变还是得靠刷新动作拿到cpu时间来执行。 所以说呢,若想直接显示出该值,就得单独开辟一个线程来执行赋值操作,这样就会直接显示出来了。
实验了没有起效。
在参见知乎:
关于Android中TextView的setText()问题?
https://www.zhihu.com/question/50088530
每一个View都被抽象成了一个RenderNode,而每一个node都关联有一个Display List Renderer。DisplayList是一个绘制命令缓冲区。也就是说,当View的成员函数onDraw被调用时,我们调用通过参数传递进来的Canvas的drawXXX成员函数绘制图形时,我们实际上只是将对应的绘制命令以及参数保存在一个List中。接下来再通过DisplayList Renderer执行这个List中的绘制命令。
答主 来源是
http://blog.csdn.net/luoshengyang/article/details/45601143
经过仔细思考之后,比较认同第一回答说法,但是改变了思路,解决了问题:
原思路: 收到购买成功的消息 执行刷新 余额显示,正常的思考逻辑都是这样。
修改后:定义一个静态的余额String ,只要点击执行购买操作 就执行 setText(String )刷新显示,
思考:当主线程受阻,开新的线程一样刷新不了UI吧,至于改成点击就刷新,先把这个setText()值传过去,等待到了cpu 时间片就可以刷新(也许思路不对,但是问题这样解决了)。