如題肯污。
出現(xiàn)場景:
送禮物的界面一個gridview 顯示不同禮物item,每送出去一個,對應(yīng)要更新展示的金幣余額彩届。
在一個fragment里面調(diào)用控件的setText()的時候伪冰,偶爾不起作用或者明顯延后,但是此時打印的getText()值確實對的樟蠕。
但是第一次進(jìn)入加載是沒有問題贮聂,退出重新進(jìn)入?yún)s沒有生效靠柑,或是過了3-4S 更久才生效。
之前是猜測主線程受阻寂汇,處理的事物太多(確實如此)病往。
參考http://blog.csdn.net/u011131296/article/details/42495129
在處理比較復(fù)雜的邏輯的時候,有時候setText之后而且確實保證里面是有值的骄瓣,但是也不能保證頁面就一定能夠顯示出來該值!settext僅僅是賦值而已耍攘,真正界面上的改變還是得靠刷新動作拿到cpu時間來執(zhí)行榕栏。 所以說呢,若想直接顯示出該值蕾各,就得單獨開辟一個線程來執(zhí)行賦值操作扒磁,這樣就會直接顯示出來了。
實驗了沒有起效式曲。
在參見知乎:
關(guān)于Android中TextView的setText()問題妨托?
https://www.zhihu.com/question/50088530
每一個View都被抽象成了一個RenderNode,而每一個node都關(guān)聯(lián)有一個Display List Renderer。DisplayList是一個繪制命令緩沖區(qū)吝羞。也就是說兰伤,當(dāng)View的成員函數(shù)onDraw被調(diào)用時,我們調(diào)用通過參數(shù)傳遞進(jìn)來的Canvas的drawXXX成員函數(shù)繪制圖形時钧排,我們實際上只是將對應(yīng)的繪制命令以及參數(shù)保存在一個List中敦腔。接下來再通過DisplayList Renderer執(zhí)行這個List中的繪制命令。
答主 來源是
http://blog.csdn.net/luoshengyang/article/details/45601143
經(jīng)過仔細(xì)思考之后恨溜,比較認(rèn)同第一回答說法符衔,但是改變了思路,解決了問題:
原思路: 收到購買成功的消息 執(zhí)行刷新 余額顯示糟袁,正常的思考邏輯都是這樣判族。
修改后:定義一個靜態(tài)的余額String ,只要點擊執(zhí)行購買操作 就執(zhí)行 setText(String )刷新顯示项戴,
思考:當(dāng)主線程受阻形帮,開新的線程一樣刷新不了UI吧,至于改成點擊就刷新肯尺,先把這個setText()值傳過去沃缘,等待到了cpu 時間片就可以刷新(也許思路不對,但是問題這樣解決了)则吟。