1

我已经仔细搜索并尝试了通常的嫌疑人,但现在是寻求帮助的时候了。

我的 Android 活动很高兴地从 SQLite 加载 EditText、Spinner 和 CheckBox 值。

问题在于,如果用户此后实际更改了一个值,因此我可以在 onBackPressed 处警告是否进行了未保存的更改(即他/她没有点击“保存”按钮)。

例如,使用我尝试过的 EditText:

  • 使用 TextWatcher.onTextChanged 侦听器,但在首次实例化 EditText 时会触发它,这使得设置“数据已更改”标志毫无意义

  • 为 DONE、ENTER、NEXT 和 DEL 键捕获各种 KEY_DOWN 事件,但结果参差不齐,这对我的 Spinners 和 CheckBoxes 没有帮助

  • onTouchListener (我想,但我现在有点模糊),无济于事

我想我正在寻找的是一个 View 类侦听器,仅在活动稳定后才附加,它会触发后续状态更改。但是,我搜索的任何内容都不符合要求。

其他人如何处理这个问题?

感谢您的任何指导。

4

1 回答 1

3

我想不出任何可以应用于各种小部件的通用机制。

不过,更清洁的解决方案是:

  • 拥有一个模型(POJO),代表您在屏幕上显示的所有数据
  • 小部件的每一个变化都反映在模型中
  • 每次在 POJO 中调用 setter 时,它都会将新的 set 值与旧的值进行比较
  • 如果进行了更改,则会引发内部标志。
  • 如果在 onBackPressed 时引发标志,则显示 AlertDialogFragment 询问是否应保存更改的值。
于 2013-05-15T15:29:30.347 回答