2012-02-04 14 views
5

EditTextのいずれかに何かを入力する2つのEditTextを作成しようとしていますが、入力したテキストは他のEditTextに表示されます。Android:2つのEditTextに対して2つのaddTextChangedListenerを持つことはできませんか?

private EditText input_a; 
private EditText input_b; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    input_a = (EditText) findViewById(R.id.input_a); 
    input_b = (EditText) findViewById(R.id.input_b); 
    input_a.setOnFocusChangeListener(this); 
    input_b.setOnFocusChangeListener(this); 
} 
@Override 
public void onFocusChange(View v,boolean hasFocus) { 
    // TODO Auto-generated method stub 
    if(v==input_a && hasFocus){ 
     input_a.setText(""); 
     input_b.setText(""); 
     input_a.addTextChangedListener(new TextWatcher(){ 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 
       input_b.setText(input_a.getText()); 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, 
        int count, int after) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, 
        int before, int count) { 
       // TODO Auto-generated method stub 

      } 

     }); 

    }else if(v==input_b && hasFocus){ 
     input_b.setText(""); 
     input_a.setText(""); 
     input_b.addTextChangedListener(new TextWatcher(){ 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 
       input_a.setText(input_b.getText()); 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, 
        int count, int after) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, 
        int before, int count) { 
       // TODO Auto-generated method stub 

      } 

     }); 
    } 

私はinput_aに入力するときに、それが正常に動作し、テキストI入力は、私がinput_bに入力するときただし、アプリケーションが予期せず終了し、input_bに示されています。私はなぜ2つのコードブロックが本当に似ているのかわかりませんが、そのうちの1つだけが動作します。

答えて

0

おそらくスタックオーバーフロー(皮肉なのですか)がありますか?

問題は、input_aがフォーカスを取得したときにTextChangedListenerを追加し、そのリスナーにinput_bの内容を設定することです。これはうまく動作します。

ただし、focusがinput_bに変更された場合、input_bにTextChangedListenerを追加しますが、input_aのTextChangedListenerは引き続き使用します。 input_bに入力すると、input_aの内容が変更され、input_bの内容を変更するTextChangeListenerがトリガーされます。これにより、TextChangedListenerがinput_bに対してトリガされ、このサイクルを続行するだけです。

+0

私はそれが無限ループのように見える一連のエラーメッセージを得た理由を説明していると思います。どうもありがとうございます!私は新しいTextChangedListenerを追加する前にremoveTextChangedListenerを試してみました。 – xiaoyao

0

LogCatのエラーメッセージは何ですか?あなたのコードに関連するものを探します。
クリフ

関連する問題