12

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

但在我的活动 A 中,捆绑始终为空。

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

3 回答 3

24

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

如果您只想Integer在附加组件中添加Intent额外内容,请不要这样做...

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

从文档中putExtras(Bundle extras)...

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

相反,只需使用...

intent.putExtra("selectedTab", FEATURED_COUPONS);

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

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

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

Intent intent = getIntent();

...然后从中Bundle获取Intent.

于 2014-06-23T08:28:38.313 回答
2

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

于 2014-06-23T07:45:21.550 回答
0

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

相反,如果您再次创建活动,我建议在活动中使用完成(),在 startActivity 方法之后。

于 2014-06-23T07:44:35.147 回答