通过在包中传递新数据来恢复旧活动

我有几个活动说A,B,C。活动A开始B,B开始C等等。 在我的应用程序中,我已经放置了一个导航抽屉,允许用户返回到活动A.当用户返回活动时,AI已经通过一些标志,实际上不重新启动活动,但只是恢复它。

intent = new Intent(activity, A.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

现在我试图通过捆绑传递一些数据。

  bundle.putInt("selectedTab", FEATURED_COUPONS); intent.putExtras(bundle); 

但在我的活动中,该包始终为空。

 if(bundle != null) { if(bundle.containsKey("selectedTab")) { int tab = bundle.getInt("selectedTab"); } } 

Solutions Collecting From Web of "通过在包中传递新数据来恢复旧活动"

你正在以错误的方式处理事情。

如果你所要做的只是把一个Integer额外的额外的Intent然后不要这样做…

 bundle.putInt("selectedTab", FEATURED_COUPONS); intent.putExtras(bundle); 

来自putExtras(Bundle extras)的文档putExtras(Bundle extras)

向意图添加一组扩展数据。 键必须包括一个包前缀 ,例如com.android.contacts应用程序将使用“com.android.contacts.ShowAll”这样的名称。

而只是使用…

 intent.putExtra("selectedTab", FEATURED_COUPONS); 

这不是你的问题的真正原因。 正如Sumit Uppal提到的,你应该在Activity A中实现onNewIntent(Intent intent) 。然后你可以使用它来设置'当前' Intent成为新的Intent

 @Override protected void onNewIntent(Intent intent) { if (intent != null) setIntent(intent); } 

然后在onResume()你可以使用…

 Intent intent = getIntent(); 

…然后从这个Intent得到Bundle

我认为你应该在onNewIntent(Intent)方法中执行“if(bundle!= null)”任务

如果要将数据传递给已经创build的活动,则必须在活动A中使用startActivityForResult并覆盖onActivityResult方法

相反,如果再次创build活动,我build议在startActivity方法之后使用finish()。