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

时间:2011-05-02 01:17:38

标签: android android-activity

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

  

Activity1来电Activity2Activity2.finish(),致电Activity3Activity3.finish()

Activity3完成后,会调用onResume的{​​{1}}方法。现在,我如何将Activity1的值传递给Activity3

6 个答案:

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