我在检查EditText方面有问题。我需要用户输入介于1-100之间的值,如果值超过to应该显示,EditText输入应该被刷新。请务必帮助我的ontextChanged部分。应用程序在吐司后崩溃了。任何帮助都将不胜感激。
MainActivity.java
userInput是EditText型的
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
progress.setText(" "+i);
}
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
userInput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
try {
int j = Integer.valueOf(userInput.getText().toString());
if(j > 100 || j < 1){
Toast.makeText(getApplicationContext(), "Please enter value between 1-100", Toast.LENGTH_SHORT).show();
}
} catch(NumberFormatException e) {
//do whatever you like when value is incorrect
}
}
@Override
public void afterTextChanged(Editable editable) {
String text = editable.toString();
if (!TextUtils.isEmpty(text)) {
seekBar.setProgress(Integer.parseInt(text));
}
else {
seekBar.setProgress(0);
}
}
});发布于 2018-03-20 18:21:46
在onTextChanged方法中这样做
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
try {
int j = Integer.valueOf(userInput.getText().toString());
if(j > 100 || j < 1){
Toast.makeText(getApplicationContext(), "Please enter value between 1-100", Toast.LENGTH_SHORT).show();
userInput.setText("")
} else {
seekBar.setProgress(j);
}
} catch(NumberFormatException e) {
//do whatever you like when value is incorrect
}
}并从afterTextChanged方法中删除实现
发布于 2018-03-20 18:45:32
在@muminers回答之后,您应该将代码放入onTextChangedMethod中,因为即使某些控件更改了editText的值而不直接进行交互,也会调用afterTextChanged方法。它有时会产生一种循环。因此,当您输入编辑文本时,您在afterTextChanged方法中做了一些事情,这间接地改变了相同的编辑文本,然后它进入了一个无限循环,导致应用程序崩溃。
https://stackoverflow.com/questions/49391377
复制相似问题