afterTextChanged
の代わりに、onTextChanged
またはその逆を使用する必要があるのはどのような状況ですか?
2 に答える
これらのイベントは、次の順序で呼び出されます。
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() メソッドがすでに他の変更を行ってオフセットを無効にしている可能性があるため、変更がどこで行われたかはわかりません。しかし、ここで知る必要がある場合は、 in を使用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
このコールバックから変更しようとするとエラーになります。