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

时间:2014-06-23 07:34:09

标签: android android-intent android-activity android-bundle

我有几个活动说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");
    }
}

3 个答案:

答案 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()。