2016-03-08 64 views
0

我有一個SeekBar和EditText.I想創建一個%滑塊,當用戶滑動Seekbar時,它會調整EditText字段。使用Seekbar調整EditText

我想這:

mInterestRateEditText.addTextChangedListener(new TextWatcher() { 
    public void afterTextChanged(Editable s) { 
    int i = Integer.parseInt(s.toString()); 
    if (i >= 0 && i <= 100) { 
     mInterestRateSeekBar.setProgress(50); 
    } 
    } 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

    public void onTextChanged(CharSequence s, int start, int before, int count) {} 
}); 

mInterestRateSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
    @Override 
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    mInterestRateEditText.setText(progress + ""); 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) { 

    } 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 

    } 
}); 

,但它是所有第二我嘗試將滑塊,它鎖定的EditText爲0,我不能移動滑塊?

+0

您正在創建一個循環。一旦你滑動,你設置一個新的文字。所以文本被改變,afterTextChanged被調用。然後,seekbar的進度又被改變了,這改變了改變seekbar的文本,這......你知道的。 – AlbAtNf

+0

哈哈謝謝!!!在你說完這個之後修復它! – x10sion

回答

1

正如我在我的評論中所述,您正在創建一個循環。更改Seekbar,更改文本。這會再次改變seekbar。

簡單的解決方案:使用布爾值。

 boolean changedProgrammatically; 

    mInterestRateEditText.addTextChangedListener(new TextWatcher() { 
     public void afterTextChanged(Editable s) { 
     int i = Integer.parseInt(s.toString()); 
    if(!changedProgrammatically){ 
     if (i >= 0 && i <= 100) { 
      mInterestRateSeekBar.setProgress(50); 
     } 

    }else{ 
changedProgrammatically = false; 
} 
     } 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

     public void onTextChanged(CharSequence s, int start, int before, int count) {} 
    }); 

    mInterestRateSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    changedProgrammatically = true; 
     mInterestRateEditText.setText(progress + ""); 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 

     } 
    });