Android onBackPressed,如何测试未保存的更改*实际上是*制作的?

时间:2013-05-15 15:26:13

标签: android listener

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

我的Android活动非常乐意从SQLite加载EditText,Spinner和CheckBox值。

如果用户此后实际更改了值,则问题是检测到所以如果未进行未保存的更改(即他/她没有点击“保存”按钮),我可以在onBackPressed上发出警告。

例如,我尝试使用EditText:

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

  • 捕获DON​​E,ENTER,NEXT和DEL键的各种KEY_DOWN事件,但是混合的结果无论如何都对我的Spinners和CheckBoxes没有帮助

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

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

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

感谢您提供任何指导。

1 个答案:

答案 0 :(得分:2)

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

然而,更清洁的解决方案是:

  • 拥有代表您在屏幕上显示的所有数据的模型(POJO)
  • 小部件的每个更改都会反映在模型中
  • 每次在POJO中调用setter时,它会将新设置值与旧设置值进行比较
  • 如果进行了更改,则会引发内部标记。
  • 如果在onBackPressed处引发该标志,则显示AlertDialogFragment,询问是否应保存更改的值。