Мое приложение должно открыть файл внутри edittext, чтобы показать его пользователю. Если пользователь хочет изменить его, просто нажмите внутри textwiew и напишите его. После этого, когда кнопка назад нажата, если текст был изменен, изменения должны быть сохранены, иначе просто закройте текущую активность и перейдите к родительскому. Есть ли способ увидеть, был ли отредактирован текст? Моя идея - явно сравнить длину файла и edittext, но есть что-то лучше, чем этот «грубый» метод?Проверьте, был ли изменен EditText
1
A
ответ
3
Вы можете использовать TextWatcher:
boolean changed = false;
EditText edit = (EditText)findViewById(R.id.medittext);
edit.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
changed = true;
}
});
Просто сравнение длины может привести к ложным отрицательным, если эти изменения имеют такую же длину, удалений в тексте.
Когда пользователь нажимает назад, просто проверьте, соответствует ли значение changed
. Это может привести к ложному положительному результату, если пользователь сделал редактирование, а затем расстегнул его, но лучше иметь несколько ложных срабатываний, чем потерять пользовательские изменения.
3
Ничего лучше, на самом деле вам нужно сравнить текст, а не длину. Пользователь может просто заменить слово. TextWatcher сообщит вам, что пользователь редактирует, но он просто может изменить и изменить его. Поэтому вам действительно нужно сравнить строки.