2016-10-15 200 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來實現它。

相關問題