我在检查EditText时遇到问题。我需要用户输入1-100之间的值,如果值超过吐司应该显示,EditText输入应该刷新。请帮我处理ontextChanged部分。应用程序在吐司后崩溃。任何帮助都将受到高度赞赏。
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);
}
}
});
答案 0 :(得分:0)
在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方法中删除实现
答案 1 :(得分:0)
在@muminers回答之后,您应该将代码放在onTextChangedMethod中,因为即使某些控件在没有您直接交互的情况下更改了editText的值,也会调用afterTextChanged方法。它有时会创建一种循环。因此,当您在编辑文本中键入内容时,您在afterTextChanged方法中执行了某些操作,间接更改了相同的编辑文本,然后进入无限循环,导致应用程序崩溃。