仅当用户输入时才设置 Editview 观察者?
set Editview watchers only when the input from user?
我有 2 个字段:美元和日元。
当我更改美元字段时,我想在日元字段中显示转换后的数字,反之亦然。
我的问题是:
如果我有 2 个字段,观察者如下:
addTextChangedListener(new TextWatcher()...)
并且两者都在互相做事,应用程序崩溃了,因为当我对 1 num 的美元进行小的更改时,美元和日元的观察者正在工作,这导致了崩溃……我现在的解决方案是不好,我在兑换美元时将听众从日元中移除(完成后将听众放回原处)。
有没有办法只通过输入而不是默认的 TextWatcher 来监视变化? (如果字段发生变化但不是通过输入,则什么都不做)
您可以使用布尔标志和视图 onFocusChangeListener 来实现它。
您仍然可以使用 TextWatcher#onTextChanged
,但添加一个 hasFocus() 检查,以便您仅修改 other 字段,如果 this 字段具有焦点(正在由用户更新)。
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());
}
}
}
...
});
我在这里假设您已经有了一种方便的方法来转换美元<->日元。
我有 2 个字段:美元和日元。 当我更改美元字段时,我想在日元字段中显示转换后的数字,反之亦然。
我的问题是:
如果我有 2 个字段,观察者如下:
addTextChangedListener(new TextWatcher()...)
并且两者都在互相做事,应用程序崩溃了,因为当我对 1 num 的美元进行小的更改时,美元和日元的观察者正在工作,这导致了崩溃……我现在的解决方案是不好,我在兑换美元时将听众从日元中移除(完成后将听众放回原处)。
有没有办法只通过输入而不是默认的 TextWatcher 来监视变化? (如果字段发生变化但不是通过输入,则什么都不做)
您可以使用布尔标志和视图 onFocusChangeListener 来实现它。
您仍然可以使用 TextWatcher#onTextChanged
,但添加一个 hasFocus() 检查,以便您仅修改 other 字段,如果 this 字段具有焦点(正在由用户更新)。
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());
}
}
}
...
});
我在这里假设您已经有了一种方便的方法来转换美元<->日元。