我有几个活动说A,B,C。活动A开始B,B开始C,依此类推。在我的应用程序中,我放置了一个导航抽屉,允许用户返回活动A.当用户返回活动A时,我已经传递了一些标志,这些标志实际上没有重新启动活动,只是恢复活动。
intent = new Intent(activity, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
现在我试图使用bundle传递一些数据。
bundle.putInt("selectedTab", FEATURED_COUPONS);
intent.putExtras(bundle);
但在我的活动A中,捆绑包始终为空。
if(bundle != null)
{
if(bundle.containsKey("selectedTab"))
{
int tab = bundle.getInt("selectedTab");
}
}
答案 0 :(得分:19)
你以错误的方式处理事情。
如果你想做的只是在Integer
额外内容中添加Intent
个额外内容,那就不要这样做了......
bundle.putInt("selectedTab", FEATURED_COUPONS);
intent.putExtras(bundle);
来自putExtras(Bundle extras)
的文档...
向intent添加一组扩展数据。 密钥必须包含包前缀,例如app com.android.contacts将使用“com.android.contacts.ShowAll”这样的名称。
而只是使用......
intent.putExtra("selectedTab", FEATURED_COUPONS);
然而,这不是您问题的真正原因。正如Sumit Uppal所提到的那样,您应该在Activity
A中实施onNewIntent(Intent intent)。然后,您可以使用它将“当前”Intent
设置为新的Intent
... < / p>
@Override
protected void onNewIntent(Intent intent) {
if (intent != null)
setIntent(intent);
}
然后在onResume()
中你可以使用......
Intent intent = getIntent();
...然后从Bundle
获取Intent
。
答案 1 :(得分:2)
我认为你应该做&#34; if(bundle!= null)&#34; onNewIntent(Intent)方法中的任务
答案 2 :(得分:0)
如果要将数据传递给已创建的活动,则必须使用startActivityForResult并覆盖活动A中的onActivityResult方法。
相反,如果再次创建活动,我建议在startActivity方法之后使用活动中的finish()。