我有一个文本字段,表示用户选择的日期。我也提供了一个按钮,供用户更改当前日期。 我面临的问题如下。
1。在Oncreate方法中,我已将文本字段设置为当前日期。当创建活动时,它会显示当前日期。
这一切都很好......
但是当我旋转设备时,再次调用oncreate并将textfield更改为当前的。我希望textfield保留用户选择的文本。
请帮我解决这个问题。有什么方法可以阻止这种情况吗?
答案 0 :(得分:3)
屏幕旋转会终止您的活动并导致整个生命周期重新启动。当发生这种情况时,onCreate仍然可以访问开始活动的原始意图,并且某些小部件可能会保留其某些状态(例如EditTexts),但是大部分动态活动数据都将丢失。为防止这种情况,请查看使用onSaveInstanceState
方法。这将允许您在旋转杀死屏幕之前将任何重要的数据成员放入Bundle中。然后将此Bundle作为参数savedInstanceState.
传递给您的onCreate。以下是关于此的开发文档:
在您的情况下,您需要将日期值保存到Bundle作为额外值。然后,在onCreate中,检查savedInstanceState是否为null,表示它包含您的日期并相应地处理它。此外,请确保如果您稍后在“活动生命周期”中为此文本设置默认值,则不会破坏您检索的日期。
答案 1 :(得分:2)
您需要在旋转前保存变量。我认为最好的选择是使用Application类作为保存变量的地方,并在onPause()函数中执行。