如何在方向更改上修复TextWatcher?

时间:2019-09-10 09:27:12

标签: java android textwatcher

我想使用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;
        }         
    }
});

问题是如何使它不会在方向改变时触发? 谢谢

3 个答案:

答案 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