只有当用户输入时才设置Editview观察者?

时间:2016-10-15 22:04:55

标签: java android textwatcher

我有两个字段:美元和日元。 当我更改美元字段时,我想在日元字段中显示转换后的数字,反之亦然。

我的问题是:

如果我有两个观察者的字段,如:

addTextChangedListener(new TextWatcher()...) 

并且两者都在互相攻击应用程序崩溃,因为当我对美元和日元的观察者进行小额更改时会导致崩溃...我的解决方案现在很糟糕,当我改变美元时,我会从日元中删除听众(并且当完成收听时)。

有没有办法只通过输入而不是默认的TextWatcher来观察更改? (如果字段改变但不通过输入,则不要做任何事情)

2 个答案:

答案 0 :(得分:1)

您可以使用布尔标志和View onFocusChangeListener来实现它。

答案 1 :(得分:1)

您仍然可以使用TextWatcher#onTextChanged但添加hasFocus()支票,这样只有当字段具有焦点时才能修改其他字段(由用户更新)。

    mDollarsText.addTextChangedListener(new TextWatcher() {
        ...
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (mDollarsText.hasFocus()) {
                // show amount in yen
                if (s == null || s.length() == 0) {
                   mYenText.setText("0");
                } else { 
                   mYenText.setText(convertDollarsToYen(mDollarsText.getText().toString());
                }
            }
        }
        ...
    });

    mYenText.addTextChangedListener(new TextWatcher() {
        ...
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (mYenText.hasFocus()) {
                // show amount in dollars
                if (s == null || s.length() == 0) {
                   mDollarsText.setText("0");
                } else { 
                   mDollarsText.setText(convertYenToDollars(mYenText.getText().toString());
                }
            }
        }
        ...
    });

我在这里假设您已经有一种转换美元< - >日元的便利方法。