2011-05-02 100 views
21

这是我的应用程序的导航:如何在Android上的活动之间传递值?

Activity1电话Activity2Activity2.finish(),叫Activity3Activity3.finish()

Activity3完成,它调用的Activity1onResume方法。现在我怎样才能将Activity3的值传递给Activity1

+0

[此链接将数据activity3传递给activity1的另一种方式](http://stackoverflow.com/a/42268095/7399521) – 2017-02-22 06:26:27

回答

47

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

在您的通话activty,实现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

+0

我无法使用此方法,因为activity2完成,activity3无法使用将值返回到activity1。应用程序范围没有变量吗? – magemello 2011-05-02 10:14:00

+0

是的,您可以将活动3的值返回到活动2,然后将活动2的活动相同的值返回到活动1。但是你是对的,还有另外一种技术可以使用android应用程序的基类来存储全局应用程序的状态。详情请参阅我的编辑 – 2011-05-02 13:18:59

2

使用会话ID的意图你使用启动活动signout活动:

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

看到这个tutorial

0

为什么连这样的结构都打扰......如果三个返回到è?只需将您的数据从三位发送到一位,并据此处理。

0

从活动3发送一个Intent需要一些触发器,如按钮或者onStop生命周期方法来发送它。最好是使用setResult方法自动发送结果。

0

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

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的子类很混乱。