iT邦幫忙

0

我在Fragment中想要透過按鍵去更改Layout的內容,可是內容需要透過Thread去資料庫抓取,在抓取的過程中想要顯示progress bar,所以在onclick中先做progressBar.setVisibility(View.Visible),然後在Thread join後執行addView再做progressBar.setVisibility(View.Gone)。可是在顯示progressBar的地方會延遲到頁面顯示後才做progressBar Visible然後又接著做Gone,導致progressBar顯示不出來。請問是哪裡的執行順序錯了嗎?
onclick:
https://ithelp.ithome.com.tw/upload/images/20210607/20136882MrweRr4yeE.jpg
addView:
https://ithelp.ithome.com.tw/upload/images/20210607/20136882m9kda21fPJ.jpg
addProgressBar:
https://ithelp.ithome.com.tw/upload/images/20210607/20136882OcSoajeTfh.jpg
Log.d:
https://ithelp.ithome.com.tw/upload/images/20210608/20136882TQB7jYV747.jpg

看更多先前的討論...收起先前的討論...
wahati iT邦新手 5 級 ‧ 2021-06-08 00:43:11 檢舉
請問你是希望在Thread的工作都完成後才addView嗎?
那這樣寫應該是不對的,目前這個code的addView幾乎跟addProgressBar同時,
所以它會show出來一瞬間然後就被close掉了。
或許你的addView應該放在Thread的Runnable的run中,會比較符合你的預期?
幾乎同時嗎?可是我在addProgressBar()的Log.d跟addView()後的Log.d差了兩、三秒
wahati iT邦新手 5 級 ‧ 2021-06-08 12:06:09 檢舉
對不起,是我說錯了。
那這樣看起來應該是因為你的Thread擋住了系統的UI Thread,
因為你有使用Thread.join()的關係,使得UI Thread被排在你的Thread後面。
詳細原因我不清楚,不過看來setVisibility以後並不會即刻執行。
而是交給UI Thread去安排它的顯示。
可是等到你的Thread執行完以後,卻又設定為Gone,結果都沒東西了。
這個我也有想過,可是我把addProgressBar()放在thread中去執行,等到join之後再執行接下來的thread然後再執行addView,可是一樣是不會即刻執行setVisibility
我後來改用AsyncTask就成功了...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答