2011-03-30 17 views
1

TextWatcherをEditTextに追加し、onTextChanged(CharSequence s、int start、int before、int count)メソッドを使用してテキストの変更をリッスンしています。 onTextChanged()は、このEditTextに10文字のテキストを貼り付けると、貼り付けられたテキストの各文字に対して、左から右に10回呼び出されます。 onTextChanged()は、10文字すべてがEditTextに貼り付けられた後に1回だけ呼び出されるようにします。私はこれが可能でなければならないと確信しています。なぜなら、常に「1」になるのであれば、「カウント」パラメータを持つのは何ですか?Android - TextWatcherは貼り付けられたテキストの文字ごとに1回呼び出されます

+0

私の悪い! onTextChanged()は、新しいテキストが貼り付けられる場所に応じて1,2回、または3回呼び出されます。テキストが貼り付けられているEditTextにテキストがなかった場合は、一度。新しいテキストが元のテキストの最初または最後に貼り付けられる場合は2回。新しいテキストが元のテキストの間のどこかに貼り付けられている場合は3回です。理由は、ペーストが別のキャラクターに隣接して起こっている場合、アンドロイドはその間にスペースを挿入するからです。スペースの挿入は、実際のテキストが挿入される前に行われます。スペースが挿入されないようにする方法があれば、もっと適切な質問でしょうか? – Beta

答えて

2

countは、1つのテキストブロックを選択して削除する場合や、オートコンプリートオプションを選択した場合など、常に1になるとは限りません。

いずれの場合でも、一度に1つのチャンクまたは1文字に貼り付けが行われるかどうかの詳細は実装の詳細です。どちらの動作にも依存すると、将来あなたのアプリが破損する可能性があります。

+0

ええ、削除操作の場合、カウントは0になります。ペーストが完了したら何かをしようとしているので、それは問題です。プラットフォームの動作が一貫していると思います。 – Beta

+0

貼り付け操作の一部として、テキストの前後に空白を挿入する機能がいくつかあります。テキストが空に設定されているかのように、ハンドラにテキストを設定するときは、予期したものから変更されたテキストを挿入しようとするとクラッシュする可能性があります。ペーストされたテキストの前後に空白を挿入すると、onTextChanged(およびその他の)イベントがさらに発生します。 – CJBS

-1

afterTextChangedを使用してみてください。電話を1回だけ受け取ります。

+0

該当しません。 afterTextChanged()は、毎回onTextChanged()が呼び出された直後に呼び出されます。 – Beta

関連する問題