EditText addTextChangedListenerがTextWatcherを繰り返し実行

1820 ワード

1.
dialEtBox.addTextChangedListener(new PhoneNumberWatcher());
 
2.
class PhoneNumberWatcher implements TextWatcher {
		//  
		
		public void beforeTextChanged(CharSequence s, int start, int count,
				int after) {
			System.out.println("beforeTextChanged--"
					+ dialEtBox.getText().toString());
		}

		public void onTextChanged(CharSequence s, int start, int before,
				int count) {
			System.out.println("onTextChanged--"
					+ dialEtBox.getText().toString());
		}

		public void afterTextChanged(Editable s) {
			System.out.println("afterTextChanged--"
					+ dialEtBox.getText().toString());
		}

	}

 
問題は上からではなく、テキストボックスの文字が変わったときです
 
public void updateEditText(String inputNumber) 
	{


		String newNumber = dialEtBox.getText().append(inputNumber).toString();// !
		
		dialEtBox.setText(newNumber);

		

	}

EditText呼び出しを変更するのは上記の方法です
実行時
 
dialEtBox.getText().append(inputNumber)

 
実はここで一回TextWatcherを実行しました!!!
 
dialEtBox.setText(newNumber);

もう一度実行した
 
次の点に注意してください.
dialEtBox.getText();StringではなくEditableオブジェクトを返します
このオブジェクトをtoString()してからappendコンテンツを!
 
これでいいです.
String newNumber =new StringBuilder(dialEtBox.getText().toString()).append(inputNumber).toString();

 
注意:EditTextの内容を文字列dialEtBoxに変換する.getText().dialEtBoxだけではなくtoString()getText(); ,このようにして返されるのはEditableオブジェクトで、このオブジェクトに対するappendはTextWatcherで受信されます!