如何在 Android 上的活动之间传递值?
Posted
技术标签:
【中文标题】如何在 Android 上的活动之间传递值?【英文标题】:How can I pass values between Activities on Android? 【发布时间】:2011-08-16 16:44:21 【问题描述】:这是我的应用程序的导航:
Activity1
调用Activity2
→Activity2.finish()
,调用Activity3
→Activity3.finish()
当Activity3
完成时,它会调用Activity1
的onResume
方法。现在如何将值从Activity3
传递到Activity1
?
【问题讨论】:
this link for another way to pass the data activity3 to activity1 【参考方案1】:Umesh 展示了一种很好的技术,但我认为你想要相反的方向。
第 1 步
在启动 Activity 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
的类来使用全局应用程序状态,请参阅此 *** answer
【讨论】:
我不能用这个方法,因为activity2已经结束,activity3不能返回值给activity1。应用范围没有变量? 是的,您可以将 Activity 3 的值返回给 Activity 2,然后将 Activity 2 的相同值返回给 Activity 1。只需将它传递给两个级别。但你是对的,还有另一种技术可以使用 android Application 基类来存储全局应用程序状态。有关详细信息,请参阅我的编辑【参考方案2】:在您用于启动活动的意图中将会话 ID 用于退出活动:
Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent)
看到这个tutorial。
【讨论】:
【参考方案3】:为什么还要费心遵循那种结构...如果三归一?只需将您的数据从三到一发送一个意图并相应地处理它。
【讨论】:
【参考方案4】:从 Activity 3 向 1 发送 Intent 需要一些触发器,例如按钮,或者可能需要 onStop 生命周期方法来发送它。最好使用 setResult 方法自动发送结果。
【讨论】:
【参考方案5】:还有其他技术,你可以调用startActivity(new Intent(getApplicationContext(),Activity1.class))
方法和Bundle类一起将数据从activity3传输到activity1。
【讨论】:
【参考方案6】:在 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 很麻烦。
【讨论】:
以上是关于如何在 Android 上的活动之间传递值?的主要内容,如果未能解决你的问题,请参考以下文章
Android - 如何在活动之间传递 HashMap<String,String>?
Android Studio中如何在Activity跳转之间传递数据