[英]How to fix TextWatcher on orientation change?
我想使用TextWatcher
為多個editText
編寫一個驗證器。
我已經有方法來驗證用戶寫入的數據是否正確。 並且還添加了驗證以檢查editText
是否為空。 但是,這是我不想要的地方。 當電話更改方向並且我不希望這種情況發生時,也會激活此TextWatcher
。 我希望它僅在用戶從editText
刪除數據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;
}
}
});
問題是如何使它不會在方向改變時觸發? 謝謝
嘗試這個:
@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;
}
}
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.
}
}});
快樂編碼:)
好的,現在我想您需要在AndroidManifest.xml
<activity>
標記中聲明android:configChanges="orientation"
並將其刪除:
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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.