代码之家  ›  专栏  ›  技术社区  ›  Mr.Eddart

RxAndroid:管理相互依赖对象的事件

  •  1
  • Mr.Eddart  · 技术社区  · 6 年前

    我有两个editText字段editText1和editText2。

    当用户更改其中任何一个的内容时,我使用Reactive来捕获。

    问题是,当我更新第二个字段时,会触发一个新事件,第二个字段的使用者会尝试更新第一个字段。这将导致无限递归。

        RxTextView.textChanges(editText1)
                .subscribe(new Consumer<CharSequence>() {
                    @Override
                    public void accept(CharSequence e) throws Exception {
                        editText2.setText(editText1.getText());
                    }
                });
    
        RxTextView.textChanges(editText2)
                .subscribe(new Consumer<CharSequence>() {
                    @Override
                    public void accept(CharSequence charSequence) throws Exception {
                        editText1.setText(editText2.getText());
                    }
                });
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Ben P.    6 年前

    我想把你的衣服包起来 setText() if 检查。

    setText()

    public void accept(CharSequence charSequence) throws Exception {
        String before = editText1.getText().toString();
        String after = editText2.getText().toString();
    
        if (!before.equals(after)) {
            editText1.setText(after);
        }
    }
    

    所以这仍然是A->B->A,但是当值第二次返回到A时,它将被忽略,无限循环将被打破。