首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -还原上次查看的活动

Android -还原上次查看的活动
EN

Stack Overflow用户
提问于 2009-09-20 01:25:15
回答 3查看 20.4K关注 0票数 9

我有三个不同的活动,用户导航之间没有特定的顺序。我的目标是双重的:

  1. 当应用程序恢复时,当用户切换到其他东西时,我想从用户离开的地方开始,即使app被终止。
  2. 当最后一次活动恢复到最后一次查看状态时,我想恢复到最后一次查看状态(我认为我对如何实现这个状态有很好的想法)。

我认为问题不在于start/stop --在那里,我几乎可以得到我所需要的东西,但是如果应用程序被终止,则是onCreate()。在这种情况下,它会选择我在清单中配置的活动。我想我可以在默认活动的onCreate()方法中添加一些东西,但是还有更好的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-20 08:19:38

如果你的应用程序还没有被“终止”,那么#1应该已经工作了,而#2只需要将任何不是自动管理的值保存到onSaveInstanceState()中的Bundle中,然后在onRestoreInstanceState()中恢复它们。

这是一种黑客行为,但我认为在应用程序实际终止的情况下,第一种最佳选择是在每个活动类的onResume中保存最近的活动,然后当您第一次运行第一个活动的onCreate时,检查然后启动正确的活动.也许在一开始就把一件空白的事放进去。就像这样:

StartActivity:

代码语言:javascript
复制
public class StartActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // get last open Activity
        String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", "");
        if (last_activity == MyActivity2.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity2.class));
        } else if (last_activity == MyActivity3.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity3.class));
        } else {
            // assume default activity
            startActivityForResult(new Intent(this, MyActivity1.class));
        }
    }

    public void onActivityResult() {
        // kill the activity if they go "back" to here
        finish();
    }
}

然后在所有其他活动(MyActivity1,2,3)中保存如下的值:

代码语言:javascript
复制
@Override
public void onResume() {
    Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
    e.putString("last_activity", getClass().getSimpleName());
    e.commit();

    super.onResume();
}

您还必须手动处理保存每个活动的数据的/restoring。您可以将所需的所有值保存到每个活动的onPause()内的首选项中,然后在onResume()中恢复它。

票数 6
EN

Stack Overflow用户

发布于 2009-09-21 15:20:41

请记住,onSaveInstanceState()在长期状态下是不可行的,即用户关闭电话,然后在不确定的点将其打开。如果你希望你的状态能在能量循环中生存,你需要创建你自己的长期状态机制。

票数 1
EN

Stack Overflow用户

发布于 2009-09-20 01:59:57

我相信您希望实现onSaveInstanceState,这将将您的活动当前状态存储在一个包中。该包将被传递到onCreate中的活动中,您可以使用它来重置值。

http://developer.android.com/guide/topics/fundamentals.html#actstate

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

https://stackoverflow.com/questions/1450019

复制
相关文章

相似问题

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