首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >startActivity导致onCreate()

startActivity导致onCreate()
EN

Stack Overflow用户
提问于 2013-12-16 13:20:04
回答 1查看 512关注 0票数 0

我有应用程序,当我使用IntentstartActivity()返回导航时,views为null,调用onCreate()并重新初始化活动。这是为什么,以及如何绕过它?

我回到这样的活动中:

代码语言:javascript
复制
@Override
    public void onBackPressed() {
          if (this.getClass() == XXX.class) {
                Intent i = new Intent(this, YYY.class);
                startActivity(i); //<-- activity restarts
                return;
            }
        }
        super.onBackPressed();

    }

我使用ActionbarSherlock,所以我有ActionBar初始化的活动,每个活动都只是扩展它。这个活动描述了我回到活动中的方式。

代码语言:javascript
复制
@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main_screen);
    initUIComponents();
    setListeners();
    resetProgress();


}

initUI()初始化UI。

编辑

我的意思是,我如何回到以前创建的activity (不是通过onBackPressed调用的那个)而不重新创建它?我使用startActivity(),但显然它重新创建了整个过程

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-16 13:37:32

如果您想要在向后按下时显示前一个屏幕,那么您不必在代码中这样做。Android在内部维护堆栈,当您按回键时将负责显示last-shown-activity。不需要通过onBackPressed()来处理

但是,如果您需要的是这个默认操作以外的其他操作,那么应该在什么时候使用onBackPressed()。否则就让Android来处理吧。

因此,在您的应用程序中,如果Activity 1调用Activity 2,用户按回键,那么默认操作将是再次显示Activity 1。不要覆盖onBackPressed()方法

编辑:对于自定义的活动流,您必须自己构建逻辑。您需要在onRestart()中重写Activity 1,在Activity 3中重写onStop()。这样,onCreate就不会再被调用了。根据您的逻辑,我的意思是,标记来跟踪您所处的活动,检查这些标志,并从那里调用所需的活动。

编辑2:前面的问题,回答您需要的内容:

Android活动管理,这意味着在意图上设置标志前面,然后调用startActivity()

使用意图标志查看Android活动堆栈管理,用于其他堆栈重新排序选项:堆栈管理

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

https://stackoverflow.com/questions/20611971

复制
相关文章

相似问题

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