衆所周知,在執行SeekBar的setProgress方法後會調用onProgressChanged方法,但是在Activity創建後初始化SeekBar就有了問題。
測試代碼
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SeekBar seekBar = findViewById(R.id.seekbar);
seekBar.setOnSeekBarChangeListener(this);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.i("seekbar","onProgressChanged");
Log.i("seekbar","Progress: "+progress);
}
測試過程
setProgress(10)
當Activity創建後,初始化SeekBar並直接設置progress爲10:
可以看到調用了onProgressChanged方法。
setProgress(0)
當Activity創建後,初始化SeekBar並直接設置progress爲0:
沒有調用onProgressChanged方法。
結論
在Activity創建後初始化SeekBar,如果設置非0值會調用onProgressChanged,設置0則不會。
所以如果需要在onProgressChanged方法裏處理事件要考慮到這個問題,我的解決方法是先設一個非零值再setProgress(0),這樣就可以在初始化時用onProgressChanged方法。