Android SeekBar在刷新使用中需要注意的問題
Android開發(fā)筆記:關(guān)于SeekBar在刷新使用中的一些問題
問題
今天在用Navigation 在兩個Fragment之間導航時發(fā)現(xiàn)了從第二個Fragment返回到第一個Fragment時SeekBar出現(xiàn)數(shù)據(jù)丟失和進度條不刷新的情況。
具體Demo是在第一個Fragemnt中通過滑動條改變ViewModel中的數(shù)據(jù),并在點擊按鈕后
導航進入第二個Fragment,在第二個Fragment中繼續(xù)改變該數(shù)據(jù),然后在通過返回鍵返
回第一個Fragment并且刷新進度條和數(shù)據(jù)。
但是其實ViewModel中的數(shù)據(jù)是正確的的。
分析問題
通過添加日志對SeekBar相關(guān)的方法的執(zhí)行情況進行分析后,發(fā)現(xiàn)在對SeekBar設置監(jiān)聽
器后,第一次創(chuàng)建Fragment中的視圖中SeekBar中的監(jiān)聽方法:
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
總會先執(zhí)行一次,而且該方法中的progress值仍為先前的值,進度條UI也仍然是之前的進度。 總之在數(shù)據(jù)同步的方面總有一些問題。
解決方法
在Fragment中添加一個標志位來判斷onProgressChanged是否是第一次執(zhí)行,若是第一次執(zhí)行,就在SeekBar中讀取viewModel中的值,并且在onProgressChanged方法中手動更改進度條:
seekBar.setOnSeekBarChangeListener(new SeekBar. OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if(isSeekBarFirst){ isSeekBarFirst = false; seekBar.setProgress(initData); }else { viewModel.getNumber().setValue(seekBar.getProgress()); } }
-否則,就將進度條的值讀取并更改ViewModel中的值。
到此這篇關(guān)于Android SeekBar在刷新使用中需要注意的問題的文章就介紹到這了,更多相關(guān)Android SeekBar刷新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ViewPager 與 Fragment相結(jié)合實現(xiàn)微信界面實例代碼
這篇文章主要介紹了ViewPager 與 Fragment相結(jié)合實現(xiàn)微信界面實例代碼的相關(guān)資料,需要的朋友可以參考下2016-07-07Android 6.0權(quán)限請求相關(guān)及權(quán)限分組方法
今天小編就為大家分享一篇Android 6.0權(quán)限請求相關(guān)及權(quán)限分組方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08android中TabHost的圖標(48×48)和文字疊加解決方法
開發(fā)過程中,有時候圖標稍微大點,比如48×48的時候,文字就會和圖標疊加起來,遇到這種問題我們該怎樣處理呢?本文將詳細介紹希望對你有所幫助2013-01-01