Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 导航到依赖于额外数据的活动_Android - Fatal编程技术网

Android 导航到依赖于额外数据的活动

Android 导航到依赖于额外数据的活动,android,Android,所以我有活动A,B和C A启动B,并通过意图的附加程序向其传递关键数据,如果没有这些数据,它将无法正常工作。B启动C,然后C完成并通过NavUtils.navigateUpFromSameTask向上导航(此)。这会导致B以空意图重新启动,并且没有保存状态,这会导致我的应用程序崩溃 当我导航到B时,在B中保留所需数据的最佳方式是什么?这就是创建startActivityForResult的目的 不是启动活动C,而是使用startActivityForResult 当你完成了C,你就可以写了 In

所以我有活动A,B和C

A启动B,并通过意图的附加程序向其传递关键数据,如果没有这些数据,它将无法正常工作。B启动C,然后C完成并通过NavUtils.navigateUpFromSameTask向上导航(此)。这会导致B以空意图重新启动,并且没有保存状态,这会导致我的应用程序崩溃


当我导航到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()