Android 导航到依赖于额外数据的活动
所以我有活动A,B和C A启动B,并通过意图的附加程序向其传递关键数据,如果没有这些数据,它将无法正常工作。B启动C,然后C完成并通过NavUtils.navigateUpFromSameTask向上导航(此)。这会导致B以空意图重新启动,并且没有保存状态,这会导致我的应用程序崩溃Android 导航到依赖于额外数据的活动,android,Android,所以我有活动A,B和C A启动B,并通过意图的附加程序向其传递关键数据,如果没有这些数据,它将无法正常工作。B启动C,然后C完成并通过NavUtils.navigateUpFromSameTask向上导航(此)。这会导致B以空意图重新启动,并且没有保存状态,这会导致我的应用程序崩溃 当我导航到B时,在B中保留所需数据的最佳方式是什么?这就是创建startActivityForResult的目的 不是启动活动C,而是使用startActivityForResult 当你完成了C,你就可以写了 In
当我导航到B时,在B中保留所需数据的最佳方式是什么?这就是创建startActivityForResult的目的 不是启动活动C,而是使用
startActivityForResult
当你完成了C,你就可以写了
Intent returnData = new Intent();
returnData.putSomeExtras...
setResult(Activity.RESULT_OK,returnData);
finish();
这将导致调用B的activity onActivityResult,并且您的额外项符合传递给此方法的意图
onActivity结果通常如下所示
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_OK){
if(requestCode == REASON_I_STARTED_ACTIVITY_C){
//do something with data
}
}
}
public static final int REASON_I_STARTED_ACTIVITY_C = 100;
Intent startCIntent = new Intent(B.this,C.class);
startActivityForResult(startCIntent,REASON_I_STARTED_ACTIVITY_C);
要开始这项活动,你可以这样做
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_OK){
if(requestCode == REASON_I_STARTED_ACTIVITY_C){
//do something with data
}
}
}
public static final int REASON_I_STARTED_ACTIVITY_C = 100;
Intent startCIntent = new Intent(B.this,C.class);
startActivityForResult(startCIntent,REASON_I_STARTED_ACTIVITY_C);
*重要注意事项*
onActivityResult在(本例中为B)中执行的活动的onResume之前被调用。另一种方法是使用SharedReferences,它将无条件地帮助您,并将您需要的信息始终存储在您希望存储的位置
我试着翻看一下您编写的解决方案,虽然它可以工作,但它工作的原因似乎不是因为startActivityForResult,而是因为活动C通过调用finish()而不是navigateUpFromSameTask()关闭。我改变了我所有的导航呼叫,以完成它似乎工作得很好,没有改变任何其他。。。我想知道这是不是应该这样做,如果是的话,为什么navigateUpFromSameTask存在。android中有一些方法没有人理解,如果你阅读android代码,你会看到类似“方法什么都不做”或“为了让这个方法工作,你还需要调用…”的评论,但我没有使用setResult,我刚把所有的导航电话都切换到finish()