记录状态:布尔值、文本更改侦听器和逻辑
Record status: Booleans, Text Changed Listeners, and logic
我正在处理一个问题,我的应用程序中的记录具有三种不同的状态(由布尔值表示):isNew
、exists
和 isDirty
。 isNew
表示一条记录是否为新记录。 exists
表示该特定记录是否存在于数据库中。 isDirty
表示记录中的任何值是否已更改。
想法是检查这些状态,并在他们尝试返回时提示尚未保存记录的警告。
我正在使用 TextChangedListener
来监控字段。
当用户第一次打开页面时,它会显示最近的记录,设置isNew
为false,exists
为true。在创建新记录时,isNew
设置为真(并且 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
,但任何后续字段更改也会 return 相同的结果。这仍然使它无用。
使用TextChangedListener
是正确的方法吗?或者有没有其他方法可以检查文本是否已更改而无需在加载时调用 TextChangedListener
?也许是一种在页面加载或创建新记录时不调用侦听器的方法?
我最终使用了
public void afterTextChanged(Editable s) { if (s.toString().equals("") && isNew) { isDirty = false; } else { isDirty = true; }}
效果很好!
我正在处理一个问题,我的应用程序中的记录具有三种不同的状态(由布尔值表示):isNew
、exists
和 isDirty
。 isNew
表示一条记录是否为新记录。 exists
表示该特定记录是否存在于数据库中。 isDirty
表示记录中的任何值是否已更改。
想法是检查这些状态,并在他们尝试返回时提示尚未保存记录的警告。
我正在使用 TextChangedListener
来监控字段。
当用户第一次打开页面时,它会显示最近的记录,设置isNew
为false,exists
为true。在创建新记录时,isNew
设置为真(并且 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
,但任何后续字段更改也会 return 相同的结果。这仍然使它无用。
使用TextChangedListener
是正确的方法吗?或者有没有其他方法可以检查文本是否已更改而无需在加载时调用 TextChangedListener
?也许是一种在页面加载或创建新记录时不调用侦听器的方法?
我最终使用了
public void afterTextChanged(Editable s) { if (s.toString().equals("") && isNew) { isDirty = false; } else { isDirty = true; }}
效果很好!