Android: fragment 中有時textview.setText()不起效

如題。

出現場景:

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容