如何在Android中的活动(Activity)之间传递数值?

22

这是我的应用程序导航:

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

Activity3 结束时,它会调用 Activity1onResume 方法。现在我如何从 Activity3 传递一个值到 Activity1


6个回答

47

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答案


我无法使用这种方法,因为Activity2已经结束,而Activity3无法将值返回给Activity1。没有应用程序范围的变量吗? - magemello
是的,您可以将Activity 3的值返回到Activity 2,然后将相同的值从Activity 2返回到Activity 1。只需在两个级别上传递即可。但是您是正确的,还有另一种技术可用于使用Android应用程序基类存储全局应用程序状态。请参见我的编辑以获取详细信息。 - Mike Marshall

2
使用会话 ID 在您用于启动活动的意图中,将其传递到登出活动:
Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent)

请查看这个教程


0
从第三个活动发送一个意图到第一个活动需要一些触发器,比如按钮或者可能是onStop生命周期方法来发送它。最好使用setResult方法自动发送结果。

0

还有另一种技术,您可以调用startActivity(new Intent(getApplicationContext(),Activity1.class))方法,并结合Bundle类从activity3传输数据到activity1。


0

为什么要遵循那种结构呢...如果从三到一只需要发送一个意图(intent)带上你的数据,然后相应地处理它就可以了。


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会很混乱。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接