2016-11-15 98 views
0

我正在使用一個非常簡單的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

我在代碼片段中添加了監聽器。搜索欄並不是真的綁在一起,簡單地說就是攝氏溫度和華氏溫度之間的轉換。搜索欄具有不同的最大值以使轉換和搜索欄的位置更易於管理。 –

回答

0

我有一個想法這裏可能是錯誤的。當你移動你的攝氏條,fahrenheitSeekBar.setProgress(fahrenheitProgress.indexOf(new Integer(value)));這個在最後被調用,並且立即調用onProgressChangedFahrenheitListener(然後調用celsiusBar.setProgress()並且圓圈開始)。

我建議在

if(fromUser){ 
    //your whole listener 
} 

fromUser如果用戶進行的改變是真實的包裝既聽衆(onProgressChanged方法),在應用程序中,從而以編程方式所做的更改會被忽略。

+0

非常感謝你,那就是問題所在! –