这是我的应用程序的导航:
Activity1
来电Activity2
→Activity2.finish()
,致电Activity3
→Activity3.finish()
Activity3
完成后,会调用onResume
的{{1}}方法。现在,我如何将Activity1
的值传递给Activity3
?
答案 0 :(得分:48)
Umesh展示了一种很好的技术,但我认为你想要相反的方向。
第1步
启动活动2和3时,请使用startActivityForResult
。这允许您在调用活动中处理结果。
startActivityForResult(MY_REQUEST_ID);
第2步
在活动2和3中,调用setResult(int, Intent)
返回值:
Intent resultData = new Intent();
resultData.putExtra("valueName", "valueData");
setResult(Activity.RESULT_OK, resultData);
finish();
第3步
在您的通话活动中,实施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 answer
答案 1 :(得分:2)
将会话ID用于您用于启动活动的意图中的注销活动:
Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent)
请参阅此tutorial。
答案 2 :(得分:0)
为什么甚至打扰这种结构...如果三个回归到一个?只需将您的数据从三个发送到一个,然后相应地处理它。
答案 3 :(得分:0)
从活动3到1发送意图需要一些触发器,如按钮或onStop生命周期方法来发送它。最好使用setResult方法自动发送结果。
答案 4 :(得分:0)
还有其他技术,你可以调用startActivity(new Intent(getApplicationContext(),Activity1.class))
方法和Bundle类来将数据从activity3传输到activity1。
答案 5 :(得分:0)
在Android上,可以启动另一个指定包名称的应用,并将参数传递给它。
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。