5

まず私のコードを見てください:

これらは私の活動です。

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 がトリガーされました。無限ループがあります。どうすればこの問題を解決できますか?

4

2 に答える 2

6

テキストを変更するときは、テキスト変更リスナーを削除する必要があります。

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));

}
于 2013-04-27T23:14:21.160 に答える
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")); 
        }

お時間をいただき申し訳ありません。そして、ご回答ありがとうございます...

于 2013-04-27T23:25:48.897 に答える