setProgress(0)不調用onProgressChanged

衆所周知,在執行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方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章