使用 Seekbar 调整 EditText
Adjust EditText with Seekbar
我有一个 SeekBar,EditText.I 想创建一个 % 滑块,当用户滑动 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,我无法移动滑块?
正如我在评论中所述,您正在创建一个循环。更改搜索栏,更改文本。这会再次更改搜索栏。
简单的解决方案:使用布尔值。
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) {
}
});
我有一个 SeekBar,EditText.I 想创建一个 % 滑块,当用户滑动 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,我无法移动滑块?
正如我在评论中所述,您正在创建一个循环。更改搜索栏,更改文本。这会再次更改搜索栏。
简单的解决方案:使用布尔值。
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) {
}
});