簡體   English   中英

EditText addTextChangedListener循環

[英]EditText addTextChangedListener loop

我有兩個“編輯文本”,每個都有一個文本監視程序,當第一個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)));
        }
    });

您可以在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.

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