2015-11-14 94 views
0
public class SampleActivity extends Activity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_datepicker); 


     final EditText text1 = (EditText) findViewById(R.id.text1); 
     final EditText text2 = (EditText) findViewById(R.id.text2); 


     text1.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 

       try { 
        int total = Integer.parseInt(s.toString()) + 1; 
        text2.setText(String.valueOf(total)); 
       }catch (Exception e){ 
        e.printStackTrace(); 
       } 


      } 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 
      @Override 
      public void afterTextChanged(Editable s) { 
      } 
     }); 

     text2.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       try { 
        int total = Integer.parseInt(s.toString()) + 2; 
        text1.setText(String.valueOf(total)); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
      } 
     }); 


    } 


    } 

嗨我正面臨着一個問題與多個編輯文本更新parallel.If我在第一個編輯文本中輸入值,第二個編輯文本changed.Same在第二個edittext。但編輯文本中光標的關鍵監聽器有問題。我無法獲得光標。如何解決這個問題?如何在android中使用Textwatcher更新兩個Edittext parralley?

+0

你的意思是光標沒有更新 –

+0

yes.You是correct.I了計算器錯誤。 – rajeshlawrance

回答

1

我不明白你在做什麼(或試圖做)。
在的onTextChanged中,您觸發的是text2onTextChanged。看起來像無限的文本更改監聽器在這裏觸發。
對所發生的事情的邏輯 - >
假設在字符1將用戶類型分爲text1total現在是2。現在您將text2設置爲total2。這反過來會觸發文本更改偵聽器text2。現在total2 + 2 = 4。您現在將4設置爲text1的文本。這又會觸發text1的文本更改偵聽器。
看起來像一個永無止境的無限循環給我。這就是你得到StackOverflow錯誤的原因(lol)你究竟想要做什麼?

不確定什麼可以解決這個問題(我手邊沒有Android Studio的工作副本),但將塊移到afterTextChanged可能會解決這個問題。

1


您可以試試這種方式。 TextWatcher會通過afterTextChanged方法通過Handler將值更新爲第二個EditText。

EditText text1; 
StringBuffer previousChar=new StringBuffer(); 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.activity_main); 
     text1=(EditText)findViewById(R.id.editText); 
     text1.addTextChangedListener(new TextWatcher() { 
        @Override 
        public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
        } 
        @Override 
        public void onTextChanged(CharSequence s, int start, int before, int count) { 
        } 
        @Override 
        public void afterTextChanged(Editable s) { 
         if(!previousChar.toString().equals(s.toString())){ 
          Message msg=new Message(); 
          msg.obj=s.toString(); 
          localHandler.sendMessage(msg); 
          previousChar=new StringBuffer(s.toString()); 
          Log.i("TAG", "TextEntered = "+s); 
         } 
        } 
       });} 

的處理器將用於更新第二的EditText文本

private Handler localHandler = new Handler(){ 
     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 
      String value=(String)msg.obj; 
      text2.setText(value); 
     } 
    }; 
0
includeTW = new TextWatcher(){ 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 

      } 

      @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) { 
       if(!(includedText.getText().toString().equals(""))) 
       { 
        excludedText.removeTextChangedListener(excludeTW); 
        String included = includedText.getText().toString(); 
        excludedText.setText(included); //////// Error Line 
        excludedText.addTextChangedListener(excludeTW); 
       } 

      } 



     }; 


     excludeTW = new TextWatcher(){ 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 

      } 

      @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) { 
       if(!(excludedText.getText().toString().equals(""))) { 
        includedText.removeTextChangedListener(includeTW); 
        String excluded = excludedText.getText().toString(); 
        includedText.setText(excluded); 
        includedText.addTextChangedListener(includeTW); 
       } 

      } 



     }; 
     includedText.addTextChangedListener(includeTW) ; 
     excludedText.addTextChangedListener(excludeTW); 

這會給正是我want.I我得到光標在每個移動價值解決方案EditText上。

0

刪除TextChangeListener另一EditText上的時候第一個是有效模式,並添加文本改變後..

public class SampleActivity extends Activity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_datepicker); 


     final EditText text1 = (EditText) findViewById(R.id.text1); 
     final EditText text2 = (EditText) findViewById(R.id.text2); 


     text1.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
    **text2.addTextChangedListener(null);** 
       try { 
        int total = Integer.parseInt(s.toString()) + 1; 
        text2.setText(String.valueOf(total)); 
       }catch (Exception e){ 
        e.printStackTrace(); 
       } 


      } 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 
      @Override 
      public void afterTextChanged(Editable s) { 
    **text2.addTextChangedListener(this);** 
      } 
     }); 

     text2.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) 
{ 
        text1.addTextChangedListener(null); 
       try { 
        int total = Integer.parseInt(s.toString()) + 2; 
        text1.setText(String.valueOf(total)); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      } 

      @Override 
      public void afterTextChanged(Editable s) 
{ 
       **text1.addTextChangedListener(this);** 

      } 
     }); 


    } 


    } 
相關問題