我有一个我在多种模式下使用的活动,所以我必须做这样的事情:
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
,在我的情况下没有额外的(主要意图)。我想弄明白为什么。
答案 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,它原来是。
人们常犯的一个错误就是使用Intents创建多个PendingIntent对象,这些对象只在“额外”内容中有所不同,期望每次都获得不同的PendingIntent。这不发生。
修复1:制作不同 PendingIntent。它必须具有不同的操作,操作,数据,类别,组件或标志 - 或请求代码整数。
修复2:使用FLAG_CANCEL_CURRENT
或FLAG_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)
我没有找到这个问题的原因所以我放弃了使用一个活动。我创建了其他活动,扩展了有问题的活动,并开始工作(两种方法)。谢谢大家的帮助。