我已进行了详尽的搜索,并尝试了通常的嫌疑人,但现在该寻求帮助了。

我的Android活动足够愉快地从SQLite加载EditText,Spinner和CheckBox值。

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

例如,我尝试使用EditText:


使用TextWatcher.onTextChanged侦听器,但在首次实例化EditText时会触发它,这使得设置“数据已更改”标志毫无意义
捕获DON​​E,ENTER,NEXT和DEL键的各种KEY_DOWN事件,但结果混杂,无论如何对我的Spinners和CheckBoxes都无济于事
onTouchListener(我认为,但是我现在有点迷糊了),无济于事


我猜我正在寻找的是View类侦听器,仅在活动稳定后才附加该View类侦听器,从而触发后续状态更改。但是,我所搜索的都不适合。

别人如何处理这个问题?

感谢您的指导。

最佳答案

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

但是,更干净的解决方案是:


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

关于android - Android onBackPressed,如何测试是否*实际上*未保存的更改?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16569102/

10-13 05:06