Статус записи: Логические значения, Прослушиватели с измененным текстом и логика

#java #android #boolean #logic

Вопрос:

Я работаю над проблемой, когда запись в моем приложении имеет три разных состояния (представленных логическими значениями): isNew , exists , и isDirty . isNew указывает, является ли запись новой записью или нет. exists указывает, существует ли эта конкретная запись в базе данных или нет. isDirty указывает, изменилось ли какое-либо из значений в записи. Идея состоит в том, чтобы проверить эти состояния и выдать предупреждение о том, что запись не была сохранена, если они попытаются вернуться.

Я использую a TextChangedListener для мониторинга полей.

Когда пользователь впервые открывает страницу, на ней отображается самая последняя запись, для которой установлены isNew значения false и exists true. При создании новой записи isNew устанавливается значение true (и exists становится ложным). Как только будут введены новые значения, isDirty они станут истинными. Сохранение наборов записей isNew в значения false и exists true.

Теперь, когда пользователь пытается выйти без сохранения, должно появиться предупреждение. Логика предупреждения должна быть примерно такой: неизмененная новая запись не должна вызывать предупреждения. Неизмененная существующая запись не должна вызывать предупреждения. Должна появиться измененная новая и измененная существующая запись.

Проблема, с которой я сталкиваюсь, заключается в том, как установить состояния (логические значения) внутри прослушивателя TextChanged. Прямо сейчас прослушиватель TextChanged запускается при загрузке страницы, а также при изменении любого из полей, в том числе при создании новой записи. Что означает, что isDirty это, по сути, всегда верно. Что затем делает его бесполезным для использования в качестве проверки при выходе.

Я пробовал использовать

 public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                            if (isNew || exists) {
                                isDirty = false;
                            }

                        }
 

И это работает, чтобы не устанавливать isDirty = true время загрузки, но любые последующие изменения поля также возвращают тот же результат. Что все равно делает его бесполезным.

правильно ли использовать TextChangedListener правильный путь? Или есть какие-то другие средства, с помощью которых я могу проверить, изменился ли текст, не вызывая TextChangedListener загрузку? Возможно, есть способ НЕ вызывать прослушивателя при загрузке страницы или создании новой записи?

Комментарии:

1. Кажется, я все понял. В итоге я использовал public void afterTextChanged(Editable s) { if (s.toString().equals("") amp;amp; isNew) { isDirty = false; } else { isDirty = true; }}

2. Являются ли какие-либо из этих трех значений статуса взаимоисключающими?

Ответ №1:

В итоге я использовал

 public void afterTextChanged(Editable s) { if (s.toString().equals("") amp;amp; isNew) { isDirty = false; } else { isDirty = true; }}
 

Отлично работает!