记录状态:布尔值、文本更改侦听器和逻辑

Record status: Booleans, Text Changed Listeners, and logic

我正在处理一个问题,我的应用程序中的记录具有三种不同的状态(由布尔值表示):isNewexistsisDirtyisNew表示一条记录是否为新记录。 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; }}

效果很好!