无法检索意图的额外内容

时间:2011-02-04 13:04:49

标签: android

我有一个我在多种模式下使用的活动,所以我必须做这样的事情:

    Intent i = new Intent(MainListActivity.this,MainActivity.class);
    extras.putInt("id", c.getId());
    extras.putInt("mode", AREA_MODE);
    i.putExtra("extras", extras);
    startActivity(i);

onCreate

    Intent i = this.getIntent();
    extras = i.getBundleExtra("extras");
    if(extras!=null){
        id = extras.getInt("id", -1);
        mode = extras.getInt("mode", COUNTRY_MODE);
    }

但意图附加内容始终为空。我错过了什么吗?有没有办法做到这一点?

编辑:由于某种原因,getIntent()方法返回先前的Intent,在我的情况下没有额外的(主要意图)。我想弄明白为什么。

6 个答案:

答案 0 :(得分:3)

试试这样:

在一项活动中:

Intent i = new Intent();
Bundle bundle = new Bundle();
bundle.putInt("id", c.getId());
bundle.putInt("mode", AREA_MODE);    
i.putExtras(bundle);

在另一项活动中:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    id = extras.getInt("id", -1);
    mode = extras.getInt("mode", COUNTRY_MODE);    
}

答案 1 :(得分:2)

应该是这样。

Intent i = new Intent(MainListActivity.this ,MainActivity.class);
i.putExtra("id", c.getId());
i.putExtra("mode", AREA_MODE);
startActivity(i);

Intent i = this.getIntent();
id = i.getIntExtra("id", -1);
mode = i.getIntExtra("mode", COUNTRY_MODE);

答案 2 :(得分:2)

啊哈!我只是调试了这个问题。由于细微的细节documented in PendingIntent,它原来是

  • PendingIntent是对系统维护令牌的引用。因此,即使发送过程重新启动,重建类似的意图也会检索原始的PendingIntent。然后发件人可以取消或更改它。
  • 类似意图 ==相同的操作,操作,数据,类别,组件和标志。额外的东西不计算在内!
  • 仅在其Extras中有所不同的意图都会检索相同的标记。
  

人们常犯的一个错误就是使用Intents创建多个PendingIntent对象,这些对象只在“额外”内容中有所不同,期望每次都获得不同的PendingIntent。这发生。

修复1:制作不同 PendingIntent。它必须具有不同的操作,操作,数据,类别,组件或标志 - 或请求代码整数。

修复2:使用FLAG_CANCEL_CURRENTFLAG_UPDATE_CURRENT 取消或修改任何现有的PendingIntent。

这两个修复产生的结果略有不同。无论哪种方式,你的新Extras都应该通过。

答案 3 :(得分:0)

以这种方式向意图添加额外内容:

 i.putExtra("extras", extras);

这会在意图中添加一个额外的“额外”。您的“额外内容”在意图中处于非标准位置。如果你的onCreate()代码要检索映射到“extras”的对象并查看它,你会发现你的“额外内容”。

标准方法是填充bundle并通过putExtras将其添加到意图中:

i.putExtras(bundle);

或使用putExtra等方便的方法:

i.putExtra("mode", AREA_MODE);

答案 4 :(得分:0)

答案 5 :(得分:0)

我没有找到这个问题的原因所以我放弃了使用一个活动。我创建了其他活动,扩展了有问题的活动,并开始工作(两种方法)。谢谢大家的帮助。