如何在Android上的活动之间传递值?
这是我的应用程序的导航:如何在Android上的活动之间传递值?
Activity1
电话Activity2
→Activity2.finish()
,叫Activity3
→Activity3.finish()
当Activity3
完成,它调用的Activity1
的onResume
方法。现在我怎样才能将Activity3
的值传递给Activity1
?
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
我无法使用此方法,因为activity2完成,activity3无法使用将值返回到activity1。应用程序范围没有变量吗? – magemello 2011-05-02 10:14:00
是的,您可以将活动3的值返回到活动2,然后将活动2的活动相同的值返回到活动1。但是你是对的,还有另外一种技术可以使用android应用程序的基类来存储全局应用程序的状态。详情请参阅我的编辑 – 2011-05-02 13:18:59
使用会话ID的意图你使用启动活动signout活动:
Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent)
看到这个tutorial。
为什么连这样的结构都打扰......如果三个返回到è?只需将您的数据从三位发送到一位,并据此处理。
从活动3发送一个Intent需要一些触发器,如按钮或者onStop生命周期方法来发送它。最好是使用setResult方法自动发送结果。
另外还有其他技术,您可以调用startActivity(new Intent(getApplicationContext(),Activity1.class))
方法以及Bundle类将数据从activity3传输到activity1。
在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的子类很混乱。
[此链接将数据activity3传递给activity1的另一种方式](http://stackoverflow.com/a/42268095/7399521) – 2017-02-22 06:26:27