导航回来时活动崩溃

时间:2015-01-01 12:52:16

标签: android android-intent android-navigation

所有

我正在3个屏幕之间进行导航,彼此依赖。

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

活动B首先从Intent读取数据并获取相应的图像&数据等并构建布局。它有一个按钮,用于从编辑文本中读取数据并传递给活动C.

活动C还根据来自Intent的数据构建布局。

我在Manifest文件中使用Parent活动配置在这些活动中实现了导航。

现在,当我在活动C中将活动导航回到活动B时,它崩溃了,因为它无法从Intent中找到数据,因为控件是从Child转到Parent而不是Parent to Child。

我理解活动B的onCreate函数再次执行。所以我在Activity 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的Intent。因此,当从活动C返回活动B时,它无法找到来自Intent的数据,因为它导致空指针异常。

那么有没有选项来显示后面的导航堆栈中的内容,而不是使用Dalija建议的Savedinstance重新创建它。

1 个答案:

答案 0 :(得分:0)

从您的描述中看起来应该阻止向活动B的后退导航。因此,当用户按下活动C中的按钮时,它将返回到活动A.如果是这种情况,则在将控件传递给活动C时应完成活动B.

...
  this.startActivity(intent); // start Activity C 
  finish();
}

完成活动将从导航堆栈中删除活动B,并完全销毁活动B以解决您的后退导航问题。

但是,如果您确实希望导航回活动B,则应在活动B中使用onSaveInstanceState()onRestoreInstanceState()来保存其状态。

Recreating Activity

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

您可以在Activity Lifecycle

中找到更多信息