回答:
これらのイベントは次の順序で呼び出されます。
beforeTextChanged(CharSequence s、int start、int count、int after)。
これは、文字が新しいテキストで置き換えられようとしていることを意味します。テキストは編集できません。
使用:変更される古いテキストを確認する必要がある場合。
onTextChanged(CharSequence s、int start、int before、int count)。
変更が加えられ、一部の文字が置き換えられました。テキストは編集できません。
使用:テキスト内のどの文字が新しいかを確認する必要がある場合。
afterTextChanged(Editable s)。
上記と同じですが、テキストが編集可能です。
使用:新しいテキストを表示し、場合によっては編集する必要がある場合。
で変更をリッスンしているだけの場合EditText
、最初の2つの方法を使用する必要はまったくありません。3番目の方法で新しい値を受け取り、必要に応じて新しいテキストを修正します。ただし、値に発生する正確な変更を追跡する必要がある場合は、最初の2つの方法を使用します。変更を聞いた後でテキストも編集する必要がある場合は、3番目の方法で編集します。
public void afterTextChanged(Editable s)
このメソッドは
s
、テキストが変更されたことを通知するために呼び出されます。s
このコールバックからさらに変更を加えることは正当ですが、変更を加えるとこのメソッドが再帰的に呼び出されるため、無限ループに陥らないように注意してください。(他のafterTextChanged()メソッドがすでに他の変更を行ってオフセットを無効にした可能性があるため、どこで変更が行われたかはわかりません。ただし、ここで知る必要がある場合は、を使用setSpan(Object, int, int, int)
しonTextChanged(CharSequence, int, int, int)
て場所にマークを付け、ここからどこから検索するかを指定できます。スパンが終わった。
public void beforeTextChanged(CharSequence s、int start、int count、int after)
このメソッドは、内
s
で、でcount
始まるstart
文字が長さの新しいテキストに置き換えられることを通知するために呼び出されますafter
。s
このコールバックから変更を試みるとエラーになります。
public void onTextChanged(CharSequence s、int start、int before、int count)
このメソッドは、内
s
で、でcount
始まる文字start
が、長さのある古いテキストを置き換えただけであることを通知するために呼び出されますbefore
。s
このコールバックから変更を試みるとエラーになります。
Android Textwatcher
入力フィールドのテキスト変更時に呼び出されるトリガーの一種です。
afterTextChanged (Editable s)
-このメソッドは、テキストが変更されたときに呼び出されます。変更を加えると、このメソッドが再帰的に呼び出されるため、ここでの操作の実行に注意する必要があります。そうしないと、無限ループにつながる可能性があります。
onTextChanged (CharSequence s, int start, int before, int count)
-このメソッドは、s内で、startで始まるカウント文字が、以前に長さを持っていた古いテキストを置き換えただけであることを通知するために呼び出されます。このコールバックからsを変更しようとすると、エラーになります。