2013-04-27 112 views
4

首先看我的代碼:無限循環錯誤EditText

這些是我的活動;

EditText text1,text2; (Are defined corretly not problem) 
text1.addTextChangedListener(new MyTextWatcher(onePercent)); 
text2.addTextChangedListener(new MyTextWatcher(twoPercent)); 
..         .. 
..         .. 
..         .. 
private class MyTextWatcher implements TextWatcher { 

    private View view; 

    private MyTextWatcher(View view) { 
     this.view = view; 

    } 

    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2)   {} 
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) 
    {} 


    public void afterTextChanged(Editable editable) { 


     String text = editable.toString(); 
     switch(view.getId()){ 

     case R.id.dis_one_percent: (this is text1) 
      if(!text.equel(""))    
       text2.setText(Double.toString(text));    

      break; 
     case R.id.dis_one_number: (and text2) 
      if(!text.equel(""))    
      text1.setText(Double.toString(text+"LOL"));     


    } 



    } 
} 

目標:當用戶在text1區域輸入某個值時,我想觸發text2區域。但是當用戶輸入一個值到text1區域時,text2的MyTextWatcher被觸發。有一個無限循環。我怎麼能解決這個問題?

+0

只是好奇......是不是' text.equel(「」)'給你一個編譯錯誤? – Ahmad 2013-04-27 23:15:38

+0

我不復制/粘貼我的代碼。只需再次寫。(: – Twinsens 2013-04-27 23:19:51

回答

6

我解決了我的問題。那真的很簡單。 (:

中的setText()之前只檢查isFocused();

case R.id.dis_one_percent: (this is text1) 
     if(!text.equals("")) 
     {    
      if(text1.isFocused()) 
      text2.setText(Double.toString(text));  
     }  

     break; 
    case R.id.dis_one_number: (and text2) 
     if(!text.equals("")) 
     {  
      if(text2.isFocused())  
       text1.setText(Double.toString(text+"LOL")); 
     } 

對不起您的時間爲您答覆,並感謝...

+0

+1。真棒,只是救了我的一天!儘管看起來很簡單,但我在這方面掙扎着,因爲我在文本字段之間設置/取消設置標籤,它變得非常複雜,再加上它並沒有真正起作用。 – Pin 2013-04-29 16:20:13

+0

謝謝(:那也偷了我的一天: (但是我不會再犯這個錯誤.. – Twinsens 2013-04-29 22:13:20

+0

你也可以在焦點改變時添加/刪除更改偵聽器,這就是我所做的,但是你的解決方案指向了我的正確方向:) – NaturalBornCamper 2018-01-23 21:59:54

3

當您更改文本時,您需要刪除文本更改偵聽器。

public void afterTextChanged(Editable editable) { 
    text1.removeTextChangedListener(onePercent); 
    text2.removeTextChangedListener(twoPercent); 
    String text = editable.toString(); 
    switch(view.getId()){ 

    case R.id.dis_one_percent: (this is text1) 
     if(!text.equel(""))    
      text2.setText(Double.toString(text));    

     break; 
    case R.id.dis_one_number: (and text2) 
     if(!text.equel(""))    
     text1.setText(Double.toString(text+"LOL"));     
    } 
    text1.addTextChangedListener(new MyTextWatcher(onePercent)); 
    text2.addTextChangedListener(new MyTextWatcher(twoPercent)); 

} 
+0

我試過,但我沒有工作:( – Twinsens 2013-04-27 23:19:11

+0

你必須刪除text1和text2然後再次添加,之後發佈的兩個編輯文本,所以我認爲你只有一個編輯文本 – 2013-04-27 23:20:50

+0

:(仍然沒有工作 – Twinsens 2013-04-27 23:22:35