簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM