首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当用户按下“后退”按钮时保持对象的状态

当用户按下“后退”按钮时保持对象的状态
EN

Stack Overflow用户
提问于 2013-12-21 16:06:11
回答 2查看 2.7K关注 0票数 5

我有一个以编程方式创建EditText视图的应用程序。我使用setId()为该视图分配一个ID

代码语言:javascript
运行
复制
myEditText.setId(100);

这样,Android会在暂停/停止应用程序时自动保存该对象的状态(正如我建议的那样,这里)。It 在以下情况下工作

  • (1)当我使用"Home“按钮离开应用程序时:如果我返回到应用程序,对象的状态(显示的文本)就会如期而至地恢复。
  • (2)在屏幕上改变方向(这涉及到Android自动销毁活动并通过Bundle恢复活动)。对象状态也保持不变。

但是,在这种情况下,它的不工作

  • (3)当我使用“后退”按钮离开应用程序时:如果我回到应用程序,EditText对象是空的。

对为什么会发生这种情况有何解释?Android真的区分了使用"Home“和"Back”的应用程序吗?根据文档,即使活动被销毁,也应该通过Bundle自动保存对象的状态。这显然发生在(2)的情况下。但在第三种情况下就不行了!

如果这是正常行为,当用户按“回”键时,我怎么能让应用程序的状态自动保存和恢复呢?我知道我可以用SharedPreferences来做这个,但我宁愿让机器人自动完成,就像在(1)和(2)情况下一样。

这种情况至少发生在Android4.0和4.2中(我还没有测试过其他人)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-21 18:10:17

我想我找到了解释。我只需要更仔细地阅读文档(感谢@lentz获得其中一个链接);请参阅这里这里

当您的活动因用户按回或活动完成而被破坏时,系统对该活动实例的概念将永远消失,因为该行为表明不再需要该活动。 如果用户按后退按钮,当前活动将从堆栈中弹出并销毁。堆栈中的前一个活动将继续进行。当活动被破坏时,系统不会保留该活动的状态。

以上解释了我问题中的行为(3)。

但是,如果系统由于系统约束(而不是正常的应用程序行为)而破坏活动,那么尽管实际的活动实例已经消失,但系统会记住它的存在,即如果用户导航回它,系统将使用一组保存的数据创建活动的新实例,该数据描述活动被销毁时的状态。系统用于恢复以前状态的保存数据称为“实例状态”,是存储在Bundle对象中的键值对的集合。

以上可能解释了行为(1)和(2)。

我不明白为什么应该将用户按回按解释为“不再需要活动”(“不需要保留其状态”)。但那是另一回事。

票数 1
EN

Stack Overflow用户

发布于 2013-12-21 16:32:59

你真的应该学习活动生命周期,因为有很多方法可以解决这个问题。由于您的活动通常是从堆栈中取出并在您向后导航时销毁的,所以最好的方法是确保您的活动在清单中标记为singleTop或singleInstance,这样它就不会从堆栈中取出,并在来回导航时重新创建。您还可以使用单例应用程序类。或者以平行线的形式来回传递文本。或者使用数据库。或者使用MVC或其他编程范例,允许您的视图被销毁并重新创建,同时填充它们的数据也会随之进行。很多“或”。研究活动生命周期,然后看看如何已经设置了应用程序体系结构,并选择最适合您的方法。

http://developer.android.com/training/basics/activity-lifecycle/index.html

http://developer.android.com/guide/components/tasks-and-back-stack.html

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20720874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档