简体   繁体   English

EditText addTextChangedListener循环

[英]EditText addTextChangedListener loop

I have two Edit Texts, each one have text watcher that change the second edittext text when the first edittext text is changed, it seems the code create a loop, is there something i can do to make the text watcher only listen to user input and not by changing the text by code? 我有两个“编辑文本”,每个都有一个文本监视程序,当第一个edittext文本更改时,它会更改第二个edittext文本,似乎代码创建了一个循环,有什么我可以做的事情,使文本监视程序仅侦听用户输入并不是通过代码更改文本?

et1.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {

            double x = Double.valueOf(et1.getText().toString());
            et2.setText(String.valueOf((x*2)));
        }
    });

    et2.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {

           double x = Double.valueOf(et2.getText().toString());
            et1.setText(String.valueOf((x/2)));
        }
    });

You can keep a reference on the TextWatcher to remove them when needed before an operation and later put them back. 您可以在TextWatcher上保留引用,以便在需要进行操作之前将其删除,然后再放回去。

private TextWatcher tv1;
private TextWatcher tv2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final EditText et1 = (EditText) findViewById(R.id.editText);
    final EditText et2 = (EditText) findViewById(R.id.editText1);

    tv1 = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {}

        @Override
        public void afterTextChanged(Editable s) {
            double x = Double.valueOf(et1.getText().toString());
            et2.removeTextChangedListener(tv2); // "disable" the watcher
            et2.setText(String.valueOf((x*2)));
            et2.addTextChangedListener(tv2);    // "enable" the watcher
        }
    };

    tv2 = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {}

        @Override
        public void afterTextChanged(Editable s) {
            double x = Double.valueOf(et2.getText().toString());
            et1.removeTextChangedListener(tv1); // "disable" the watcher
            et1.setText(String.valueOf((x/2)));
            et1.addTextChangedListener(tv1);    // "enable" the watcher
        }
    };

    et1.addTextChangedListener(tv1);
    et2.addTextChangedListener(tv2);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 将addTextChangedListener()添加到在循环中创建的每个EditText对象 - add addTextChangedListener() to each EditText object created in a loop 在不知道 EditText Id 的情况下使用 addTextChangedListener - Use addTextChangedListener without knowing EditText Id Android Studio - EditText.addTextChangedListener无效 - Android Studio - EditText.addTextChangedListener not working 使用TextWatcher addTextChangedListener()在EditText中设置文本时的IndexOutOfBoundsException - IndexOutOfBoundsException when setting text in EditText using TextWatcher addTextChangedListener() java.lang.NullPointerException :在 android.widget.EditText.addTextchangedlistener 上 - java.lang.NullPointerException : on android.widget.EditText.addTextchangedlistener android.widget.EditText.addTextChangedListener 的 java.lang.NullPointerException - java.lang.NullPointerException for android.widget.EditText.addTextChangedListener 如何在 addTextChangedListener 中使用可扩展字符串来更改 editText substring 的颜色? - How to use spannable strings in addTextChangedListener to change color of editText substring? 删除 addTextChangedListener() 当 EditText 值以编程方式而不是手动更改时 - Remove addTextChangedListener() When the EditText values changed programmatically not manually 尝试在空对象引用上调用虚拟方法“void android.widget.EditText.addTextChangedListener(android.text.TextWatcher)” - Attempt to invoke virtual method 'void android.widget.EditText.addTextChangedListener(android.text.TextWatcher)' on a null object reference NullPointerException / NPE由addTextChangedListener引起 - NullPointerException / NPE Caused by addTextChangedListener
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM