私はアクティビティのあるアプリを持っています。このアクティビティにはEditText
フィールドがあります。このフィールドには、アクティビティメソッドのユーザ名がロードされます。onStart()
EditText:ユーザー入力の変更と負荷データの変更の検出
ユーザは自分の名前を編集し、次のアクティビティに移動できます。ユーザーが実際に変更を行ったかどうかを検出して、変更を保存するように促す必要があります。
たとえば、ユーザー名が「Sam Jones」であり、彼はそれを編集しないので、私は彼に保存を促したくありません。しかし、もし彼がそれをちょうど "サム"に変えたら、私は彼に促したい。
このEditText
フィールドにTextWatcher
を追加しました。ブール値フラグ 'MADE_CHANGES'を作成しました。このフラグを以下のように変更しています。
TextWatcher textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
MADE_CHANGES = true;
}
@Override
public void afterTextChanged(Editable editable) {
}
ただし、このメソッドはアクティビティのonStart
メソッドでも呼び出されています。当然のことながら、EditText
が空のフィールドから "Sam Jones"に変更されているためです。だから私の "保存"プロンプトは、ユーザーが自分の名前を変更していない場合でも表示されます。
onStart
によってトリガーされた最初の初めてのデータロードイベントを除外して、EditTextがユーザーによって変更されたかどうかを確認する優れた方法はありますか?