如何在 Android 上的活动之间传递值?

Posted

技术标签:

【中文标题】如何在 Android 上的活动之间传递值?【英文标题】:How can I pass values between Activities on Android? 【发布时间】:2011-08-16 16:44:21 【问题描述】:

这是我的应用程序的导航:

Activity1 调用Activity2Activity2.finish(),调用Activity3Activity3.finish()

Activity3完成时,它会调用Activity1onResume方法。现在如何将值从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>?

如何在活动和浏览器片段之间传递值? [复制]

如何在 Fragment 之间传递值

Android Studio中如何在Activity跳转之间传递数据

如何在后台的两个 android 活动之间交换数据以通过蓝牙发送数据?

在android中的活动之间传递非原始类型的数据