私はこのようなEditTextにTextWatcherを持っています
// the text changed listener for the search field
private TextWatcher searchWatcher = new TextWatcher()
{
@Override
public void afterTextChanged(Editable span)
{
Log.v(TAG, "afterTextChanged: "+etSearch.getText().toString());
}
@Override
public void beforeTextChanged(CharSequence s,
int start,
int count,
int after)
{
Log.v(TAG, "beforeTextChanged: "+etSearch.getText().toString()
+"; start="+start+"; count="+count+"; after="+after);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
Log.v(TAG, "onTextChanged: "+etSearch.getText().toString());
}
}
(ここで、etSearchは私のEdittextetSearch.addTextChangedListener(searchWatcher)
です。)
2.1-update1を実行しているSonyEricssonXperiaと、2.1-update1を実行しているAVDがあります。エミュレーターで、EditTextをクリックし、ソフトキーボードを使用してabcと入力し、delボタンを1回押します。電話で、EditTextをタッチし、ソフトキーボードでabcと入力して、delを1回押します。電話で、私はこれを受け取ります:
beforeTextChanged: ; start=0; count=0; after=1
onTextChanged: a
afterTextChanged: a
beforeTextChanged: a; start=0; count=1; after=2
onTextChanged: ab
afterTextChanged: ab
beforeTextChanged: ab; start=0; count=2; after=3
onTextChanged: abc
afterTextChanged: abc
beforeTextChanged: abc; start=0; count=3; after=2
onTextChanged: ab
afterTextChanged: ab
エミュレーターでは、次のようになります。
beforeTextChanged: ; start=0; count=0; after=1
onTextChanged: a
afterTextChanged: a
beforeTextChanged: a; start=1; count=0; after=1
onTextChanged: ab
afterTextChanged: ab
beforeTextChanged: ab; start=2; count=0; after=1
onTextChanged: abc
afterTextChanged: abc
beforeTextChanged: abc; start=2; count=1; after=0
onTextChanged: ab
afterTextChanged: ab
なぜそれらは同じではないのですか?どちらが正しい動作ですか?