如題。
出現場景:
送禮物的界面一個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 時間片就可以刷新(也許思路不對,但是問題這樣解決了)。