2016-10-15 189 views
0

我有2个领域:美元和日元。 当我更改美元字段时,我想在日元字段中显示转换的数字,反之亦然。只有当用户输入时才设置Editview观察者?

我的问题是这样的:

如果我有2场与像观察家:

addTextChangedListener(new TextWatcher()...) 

和两做事彼此的应用程序崩溃,因为当我做在1个NUM的小变化美元和日元的观察者的美元正在工作,导致崩溃......我现在的解决方案很糟糕,当我改变美元时(当完成时让听众回来),我将听众从日元中移除。

有没有什么办法只通过输入观察变化而不是使用默认的TextWatcher? (如果该字段发生变化但不通过输入,则不要执行任何操作)

回答

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()); 
       } 
      } 
     } 
     ... 
    }); 

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

1

您可以使用布尔标志并查看onFocusChangeListener来实现它。

相关问题