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

问题描述 投票:1回答:1

我有2个editText字段editText1和editText2。

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

当发生这种情况时,我想将第一个字段的值复制到另一个字段,反之亦然(使它们相互依赖)。

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

我需要的是只考虑来自用户的事件,而不考虑我在消费者中执行的setText中的事件。

    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());
                }
            });
android rx-java rx-android
1个回答
1
投票

我会尝试用setText()支票包装你的if电话。

如果在TextView A中键入内容,该值将传播到TextView B,然后将自行更新。当然,这会传播回A ...但A应该已经具有相同的值。因此,您可以检查并仅在值不同时实际调用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时,它将被忽略,并且无限循环将被打破。

© www.soinside.com 2019 - 2024. All rights reserved.