2014-12-01 50 views
0

在我的应用程序中,我正在使用菜单后退按钮返回到上一个活动。我的一个活动正在从其之前的活动中获取意图,并在完成http调用之后发送意向到下一个活动,以便流程类型为A1 - 意图 - > A2 - 意图 - > A3。问题是当我从A3返回到活动A2时,它崩溃了。我相信原因是空的。所以我说下面的代码在活动A3和A2移动应用程序崩溃时,我使用菜单后退按钮

活动A3

public boolean onOptionsItemSelected(MenuItem menuItem) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    switch (menuItem.getItemId()) { 
    case android.R.id.home: 
     Intent homeIntent = new Intent(context, AllClasses.class); 
     homeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     homeIntent.putExtras(b); // bundle b has the required data for A2 
     startActivity(homeIntent); 
    } 
    return super.onOptionsItemSelected(menuItem); 
} 

活动A2

 protected void onReStart(){ 

    // retreiving data from intent 
      Bundle b = new Bundle(); 
      b = getIntent().getExtras(); 
      String imessage_string = b.getString("imessage"); 
      Log.d("onrestart",imessage_string); 
} 

问题: - 现在的问题是,现在如果我按后退按钮的菜单栏上A3首先我看到消息“不幸的项目已经停止”,然后按“确定”后,A2开始像我已经从A1移动到A2,并打电话给asyncTask。如果我评论“homeIntent.putExtras(b);”在A3然后我收到错误消息两次,直接跳到A1。我相信在返回A2时,我的onRestart()方法没有被调用,因为我没有对asyncTask进行任何调用。有没有人知道我应该在这里做什么?感谢您提前帮助.... :)

+1

你想要使用onResume(),你必须重写,而不是onReStart()。另外,如果操作栏处理进入家庭活动,你不应该明确地启动onOptionsItemsSelected() – Martin 2014-12-01 19:19:04

+0

好吧...我的座右铭是去前一个屏幕,如果我不使用onOptionsltemsSelected()那么怎么做我将id传回给需要调用asyncTask方法的A2。 – 2014-12-01 19:27:42

+0

根据这里描述的活动生命周期http://developer.android.com/training/basics/activity-lifecycle/pausing.html我应该使用onReStart(),因为当我打电话给另一个活动我的上一个活动停止(隐藏) ...你不同意吗? – 2014-12-01 19:45:07

回答

0

如果你想通过从A3到A2(A立场活动)的东西考虑使用onActivityResult在A2

看那answer,希望它有助于

+0

谢谢@imran ...我没有使用A3来计算A2的密码。这种情况很简单,就像进入下一页并返回。但问题已解决。我必须将活动A2声明为“launchmode = singleTop”,这样我的系统才能在backstack中保持实例活动状态,然后从A3开始,我必须调用navutils.navigateupfromsametask(this)“将A2的实例置于backstack的顶层。没有我需要从A3传递给A2。 – 2014-12-04 18:17:11

相关问题