Android 活动在返回时崩溃

Android 活动在返回时崩溃,android,android-intent,android-navigation,Android,Android Intent,Android Navigation,全部, 我在3个相互依赖的屏幕之间执行导航 活动A有一个包含表行列表的表。每一行都有onclick侦听器事件,其中从表行获取数据并传递到下一屏幕活动B 活动B从读取意图中的数据开始,获取相应的图像和数据等,并构建布局。它有一个按钮,in从编辑文本中读取数据并传递给活动C ... this.startActivity(intent); // start Activity C finish(); } 活动C还基于来自Intent的数据构建布局 我通过清单文件中的父活动配置实现了这些活动之

全部,

我在3个相互依赖的屏幕之间执行导航

活动A有一个包含表行列表的表。每一行都有onclick侦听器事件,其中从表行获取数据并传递到下一屏幕活动B

活动B从读取意图中的数据开始,获取相应的图像和数据等,并构建布局。它有一个按钮,in从编辑文本中读取数据并传递给活动C

...
  this.startActivity(intent); // start Activity C 
  finish();
}
活动C还基于来自Intent的数据构建布局

我通过清单文件中的父活动配置实现了这些活动之间的导航

现在,当我在Activity C到Activity B中进行反向导航时,它崩溃了,因为它无法从Intent中找到数据,因为控件是从子级到父级的,而不是从父级到子级的

我知道活动B的onCreate函数再次执行。所以我在活动B中保留了onPause和onResume方法来保持重新执行。但是没有运气

有人能建议如何处理这种情况吗

编辑:

活动B:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_activity);
getActionBar().setDisplayHomeAsUpEnabled(true);
source_activity = this.getIntent().getStringExtra("source_activity");
Bundle b = this.getIntent().getExtras();
if(b!=null)
  DashBoardDisplay_l = b.getParcelable("obj");
Name_ref=DashBoardDisplay_l.getName();
}
活动C:

protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
overridePendingTransition(R.anim.activity_open_translate,R.anim.activity_close_scale);
setContentView(R.layout.point_log_activity);
Intent intent = getIntent();
String YourtransferredData = intent.getExtras().getString("ref_name");
Log.d(TAG, "ref name "+YourtransferredData);
Name=YourtransferredData;
Log.d(TAG, "name value "+Name);
getActionBar().setDisplayHomeAsUpEnabled(true);
new BackEndJob().execute();
}
活动B包含一些来自先前屏幕活动A的意图。因此,当从活动C返回到活动B时,它无法从意图中找到数据,因此导致空指针异常


因此,是否有任何选项可以显示后台导航堆栈中的内容,而不是使用Dalija建议的Savedinstance重新创建它。

根据您的描述,似乎应该阻止对活动B的后台导航。因此,当用户在活动C中按下“后退”按钮时,它将返回到活动A。如果是这种情况,那么您应该在将控件传递给活动C时完成活动B

...
  this.startActivity(intent); // start Activity C 
  finish();
}
完成活动将从导航堆栈中删除活动B,并完全销毁活动B以解决您的后导航问题

但是,如果确实要导航回活动B,则应在活动B中使用onSaveInstanceState和onRestoreInstanceState保存其状态

启动活动C时,活动B停止。此时,如果需要清理资源,系统可以随时决定销毁活动B。你对这个过程没有任何影响,也无法阻止它


您可以在

中找到更多信息。请显示您的代码,然后我们可以指导您。添加您的代码片段和日志感谢所有回复者。将尝试此建议并返回。