How can I pass values between Activities on Android?
这是我的应用程序的导航:
Activity1 callsActivity2 →Activity2.finish() , callActivity3 →Activity3.finish()
当
Umesh展示了一种很好的技巧,但我认为你想要相反的方向。
步骤1
启动活动2和3时,使用
1 | startActivityForResult(MY_REQUEST_ID); |
步骤2
在活动2和3中,调用
1 2 3 4 | Intent resultData = new Intent(); resultData.putExtra("valueName","valueData"); setResult(Activity.RESULT_OK, resultData); finish(); |
步骤3
在您的调用活动中,实现
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
是的,您也可以通过向扩展
按照您开始活动的意图,将会话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中,活动的子类是混乱的。
还有其他技术,您可以调用
将意图从活动3发送到1需要一些触发器,比如按钮,或者可能需要onstop生命周期方法来发送它。最好使用setresult方法自动发送结果。
为什么还要费心遵循这种结构…如果三变一?只需发送一个意图和您的数据从三到一,并相应地处理它。