我想使用editText
为多个TextWatcher
写一个验证器。
我已经有方法来验证用户写入的数据是否正确。
并且还添加了验证以检查editText
是否为空。但是,这是我不想要的地方。
当电话更改方向并且我不希望这种情况发生时,也会激活此TextWatcher
。我希望它仅在用户从editText
删除数据时起作用。
代码如下:
@Override
final public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
final public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
final public void afterTextChanged(Editable s) {
String text = textView.getText().toString();
if(textView.getText().toString().isEmpty()){
textView.setError("Can't be empty");
ParametersFrag.isCorrect = false;
} else {
validate(textView, text);
}
}
片段中的validate
部分看起来像这样:
editText2_5.addTextChangedListener(new ParameterValidator(editText2_5) {
@Override
public void validate(TextView textView, String text) {
double parDouble = Double.parseDouble(Tab2Fragment.editText2_5.getText().toString());
if (parDouble < sth_min) {
textView.setError(getString(R.string.err_min_value) + " " + sth_min);
ParametersFrag.isCorrect = false;
} else if (parDouble > sth_max) {
textView.setError(getString(R.string.err_max_value) + " " + sth_max);
ParametersFrag.isCorrect = false;
} else {
ParametersFrag.isCorrect = true;
}
}
});
问题是如何使它不会在方向改变时触发? 谢谢
答案 0 :(得分:0)
尝试一下:
@Override
public void onConfigurationChanged(@NotNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
switch (newConfig.orientation) {
case Configuration.ORIENTATION_LANDSCAPE:
editText2_5.addTextChangedListener(null);
break;
case Configuration.ORIENTATION_PORTRAIT:
// editText2_5.addTextChangedListener(null);
// ============= OR =============
// editText2_5.addTextChangedListener(new ParameterValidator(editText2_5) {
// @Override
// public void validate(TextView textView, String text) {
// double parDouble = Double.parseDouble(Tab2Fragment.editText2_5.getText().toString());
// if (parDouble < sth_min) {
// textView.setError(getString(R.string.err_min_value) + " " + sth_min);
// ParametersFrag.isCorrect = false;
// } else if (parDouble > sth_max) {
// textView.setError(getString(R.string.err_max_value) + " " + sth_max);
// ParametersFrag.isCorrect = false;
// } else {
// ParametersFrag.isCorrect = true;
// }
// }
// });
break;
default:
break;
}
}
答案 1 :(得分:0)
private var doesDeviceTitled = false
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
doesDeviceTitled = when (newConfig.orientation) {
Configuration.ORIENTATION_LANDSCAPE -> {
true
}
else -> {
false
}
}
}
注意:上面的代码在Kotlin中
然后使用此布尔变量进行包装确认。
editText2_5.addTextChangedListener(new ParameterValidator(editText2_5) {
@Override
public void validate(TextView textView, String text) {
if(!doesDeviceTitled){
//Your validation code here.
}
}});
快乐编码:)
答案 2 :(得分:0)
好的,所以现在我想,您需要在android:configChanges="orientation"
的{{1}}标签中声明<activity>
并将其删除:
AndroidManifest.xml