SeekBar没有正确递增

问题描述:

我正在使用一个非常简单的Android应用程序来使用SeekBar来转换温度。SeekBar没有正确递增

有2个搜索条,一个选择摄氏温度,另一个选择华氏温度。它们在两个代码初始化为如下:

private SeekBar celsiusSeekbar; 
private TextView celsiusValueText; 
private SeekBar fahrenheitSeekBar; 
private TextView fahrenheitValueText; 
private ArrayList<Integer> fahrenheitProgress; 
private ArrayList<Integer> celsiusProgress; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    this.celsiusSeekbar = (SeekBar) findViewById(R.id.celsius_seekbar); 
    this.fahrenheitSeekBar = (SeekBar) findViewById(R.id.fahrenheit_seekbar); 
    this.celsiusValueText = (TextView) findViewById(R.id.celsius_value); 
    this.fahrenheitValueText = (TextView) findViewById(R.id.fahrenheit_value); 

    this.initCelsiusProgress(); 
    this.celsiusSeekbar.setMax(200); 
    this.celsiusSeekbar.setProgress(100); 
    this.celsiusValueText.setText("0°C"); 
    this.celsiusSeekbar.incrementProgressBy(1); 
    this.celsiusSeekbar.setOnSeekBarChangeListener(new CelsiusSeekBarChangedListener()); 

    this.initFahrenheitProgress(); 
    this.fahrenheitSeekBar.setMax(360); 
    this.fahrenheitSeekBar.setProgress(180); 
    this.fahrenheitSeekBar.incrementProgressBy(1); 
    this.fahrenheitValueText.setText("32°F"); 
    this.fahrenheitSeekBar.setOnSeekBarChangeListener(new FahrenheitSeekBarChangedListener()); 
} 

private void initFahrenheitProgress() { 
    fahrenheitProgress = new ArrayList<>(); 
    for(int i = 0; i <= 360; i++) 
     fahrenheitProgress.add(i, i - 148); 
} 

private void initCelsiusProgress(){ 
    celsiusProgress = new ArrayList<>(); 
    for(int i = 0; i <= 200; i++) 
     celsiusProgress.add(i, i - 100); 
} 

private int convertCelsiusProgressToValue(int progress){ return celsiusProgress.get(progress); } 

private int convertFahrenheitProgressToValue(int progress){ return fahrenheitProgress.get(progress); } 

private class CelsiusSeekBarChangedListener implements SeekBar.OnSeekBarChangeListener { 

    @Override 
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
     System.out.println("progress : " + progress + " | seekbar progresss : " + seekBar.getProgress()); 
     //Update celsius temperature 
     celsiusValueText.setText(convertCelsiusProgressToValue(progress) + "°C"); 

     //Update fahrenheit temperature 
     fahrenheitValueText = (TextView) findViewById(R.id.fahrenheit_value); 
     int value = (int) (convertCelsiusProgressToValue(progress) * 1.8 + 32); 
     fahrenheitValueText.setText(value + "°F"); 
     fahrenheitSeekBar.setProgress(fahrenheitProgress.indexOf(new Integer(value))); 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) {} 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) {} 

} 

private class FahrenheitSeekBarChangedListener implements SeekBar.OnSeekBarChangeListener { 

    @Override 
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
     //Update fahrenheit temperature 
     fahrenheitValueText.setText(convertFahrenheitProgressToValue(progress) + "°F"); 

     //Update celsius temperature 
     celsiusValueText = (TextView) findViewById(R.id.celsius_value); 
     int value = (int) ((convertFahrenheitProgressToValue(progress)-32)/1.8); 
     celsiusValueText.setText(value + "°C"); 
     celsiusSeekbar.setProgress(celsiusProgress.indexOf(new Integer(value))); 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) {} 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) {} 

} 

第一搜索条(为摄氏温度)由一种C和-17之间0°℃下递增,但随后被5和我不递增不明白为什么。这里有一个小小的GIF向你展示这个问题:GIF

我希望搜索栏每次增加一个。

如果有人有想法解释为什么它不能正常工作,我会非常感激!

+1

他们绑在一起吗?告诉我们听众。 – Shadov

+0

我在代码片段中添加了监听器。搜索栏并不是真的绑在一起,简单地说就是摄氏温度和华氏温度之间的转换。搜索栏具有不同的最大值以使转换和搜索栏的位置更易于管理。 –

我有一个想法这里可能是错误的。当你移动你的摄氏条,fahrenheitSeekBar.setProgress(fahrenheitProgress.indexOf(new Integer(value)));这个在最后被调用,并且立即调用onProgressChangedFahrenheitListener(然后调用celsiusBar.setProgress()并且圆圈开始)。

我建议在

if(fromUser){ 
    //your whole listener 
} 

fromUser如果用户进行的改变是真实的包装既听众(onProgressChanged方法),在应用程序中,从而以编程方式所做的更改会被忽略。

+0

非常感谢你,那就是问题所在! –