2012-02-04 24 views
5

Tôi đang cố gắng tạo hai EditText nơi tôi nhập bất kỳ thứ gì vào một trong EditText, văn bản tôi đã nhập sẽ được hiển thị trên EditText khác.Android: không thể có hai addTextChangedListener cho hai EditText?

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 

      } 

     }); 
    } 

Vì vậy, khi tôi gõ vào input_a, nó hoạt động tốt, các văn bản tôi đầu vào được thể hiện trong input_b Tuy nhiên, khi tôi gõ vào input_b, việc áp dụng chặt chẽ bất ngờ. Tôi không hiểu tại sao hai khối mã thực sự giống nhau nhưng chỉ một trong số chúng hoạt động.

Trả lời

0

Có thể bạn đang gặp phải tình trạng tràn ngăn xếp (mỉa mai phải không?)

Vấn đề là khi input_a lấy tiêu điểm, bạn đang thêm một TextChangedListener và trong trình nghe đó bạn đặt nội dung cho input_b. Điều này hoạt động tốt.

Tuy nhiên, khi tiêu điểm thay đổi thành input_b, bạn thêm một TextChangedListener vào input_b nhưng bạn vẫn có TextChangedListener cho input_a. Bây giờ khi bạn gõ vào input_b nó thay đổi nội dung của input_a mà kích hoạt TextChangeListener của nó mà thay đổi nội dung của input_b. Điều này kích hoạt TextChangedListener cho input_b và bạn chỉ cần tiếp tục chu kỳ này.

+0

Tôi nghĩ vậy, điều đó có thể giải thích tại sao tôi nhận được một chuỗi thông báo lỗi giống như một vòng lặp vô hạn. Cảm ơn bạn rất nhiều! Tôi đã thử removeTextChangedListener trước khi thêm TextChangedListener mới và nó hoạt động! – xiaoyao

0

Thông báo lỗi trong LogCat là gì? Tìm cái liên quan đến mã của bạn.
Cliff

Các vấn đề liên quan