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

How can I pass values between Activities on Android?

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

Activity1 calls Activity2Activity2.finish(), call Activity3Activity3.finish()

Activity3结束时,称为Activity1onResume方法。现在,如何将值从Activity3传递到Activity1


Umesh展示了一种很好的技巧,但我认为你想要相反的方向。

步骤1

启动活动2和3时,使用startActivityForResult。这允许您在调用活动中处理结果。

1
startActivityForResult(MY_REQUEST_ID);

步骤2

在活动2和3中,调用setResult(int, Intent)返回一个值:

1
2
3
4
Intent resultData = new Intent();
resultData.putExtra("valueName","valueData");
setResult(Activity.RESULT_OK, resultData);
finish();

步骤3

在您的调用活动中,实现onActivityResult并获取数据:

1
2
3
4
5
6
7
8
9
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答案


按照您开始活动的意图,将会话ID用于注销活动:

1
2
3
Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent)

请参见本教程。


在Android上,可以启动另一个具有指定包名称的应用程序,并向其传递参数。

1
2
3
4
5
6
7
8
9
10
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);
}

下面的代码可用于检索目标应用程序中的参数。

1
2
3
public static String getArgument(Activity activity) {
    return activity.getIntent().getStringExtra(Intent.EXTRA_TEXT);
}

只需要一个对活动的引用,这在Unity中非常有用,因为在Unity中,活动的子类是混乱的。


还有其他技术,您可以调用startActivity(new Intent(getApplicationContext(),Activity1.class))方法和bundle类,将数据从activity3传输到activity1。


将意图从活动3发送到1需要一些触发器,比如按钮,或者可能需要onstop生命周期方法来发送它。最好使用setresult方法自动发送结果。


为什么还要费心遵循这种结构…如果三变一?只需发送一个意图和您的数据从三到一,并相应地处理它。