2016-10-15 7 views
0

私は2つのフィールドを持っています:ドルと円。 ドルフィールドを変更すると、円フィールドに変換されたnumを表示したい、逆の場合も同様です。Editviewウォッチャーはユーザーからの入力があった場合にのみ設定されますか?

私の問題はこれです:私は中1 NUMに小さな変更を行うときので

addTextChangedListener(new TextWatcher()...) 

とアプリがクラッシュお互いに物事をやって、両方:私のようなウォッチャーとの2つのフィールドを持っている場合は

ドルはドルと円のウォッチャーがクラッシュの原因となっています...私の解決策は悪いです。私はドルを変更するとリスナーを取り除きます。

デフォルトの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

ブール値のFlagとView onFocusChangeListenerを使用して、それを達成できます。

関連する問題