这是我的应用程序导航:
Activity1
调用Activity2
→Activity2.finish()
,调用Activity3
→Activity3.finish()
当 Activity3
结束时,它会调用 Activity1
的 onResume
方法。现在我如何从 Activity3
传递一个值到 Activity1
?
这是我的应用程序导航:
Activity1
调用Activity2
→Activity2.finish()
,调用Activity3
→Activity3.finish()
当 Activity3
结束时,它会调用 Activity1
的 onResume
方法。现在我如何从 Activity3
传递一个值到 Activity1
?
Umesh 展示了一种不错的技巧,但我认为你想要相反的方向。
步骤1
在启动 Activity 2 和 3 时,使用 startActivityForResult
。这将允许您在调用 Activity 中处理结果。
startActivityForResult(MY_REQUEST_ID);
步骤 2
在活动 2 和 3 中,调用 setResult(int, Intent)
方法返回一个值:
Intent resultData = new Intent();
resultData.putExtra("valueName", "valueData");
setResult(Activity.RESULT_OK, resultData);
finish();
第三步
在您的调用活动中,实现onActivityResult
并获取数据:
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == MY_REQUEST_ID) {
if (resultCode == RESULT_OK) {
String myValue = data.getStringExtra("valueName");
// use 'myValue' return value here
}
}
}
编辑:
技巧 #2
是的,你也可以通过向应用程序添加一个继承Application
类的类来使用全局应用程序状态,参见这个StackOverflow答案
Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent)
请查看这个教程。
还有另一种技术,您可以调用startActivity(new Intent(getApplicationContext(),Activity1.class))
方法,并结合Bundle类从activity3传输数据到activity1。
为什么要遵循那种结构呢...如果从三到一只需要发送一个意图(intent)带上你的数据,然后相应地处理它就可以了。
public static void launchApp(Context context, String packageName) {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if(intent == null) {
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName));
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_TEXT, "*argument to send*");
context.startActivity(intent);
}
public static String getArgument(Activity activity) {
return activity.getIntent().getStringExtra(Intent.EXTRA_TEXT);
}
只需要对Activity的引用即可,在Unity中这非常有用,因为子类化Activity会很混乱。