所以我试图通过Intent在两个片段之间发送数据,Intent一直在工作,直到我今天通过测试通过。奇怪的是,我的意图仍然发送对象(在这种情况下,"游戏"),它通过。但是,对象的所有原始值在到达时都是空的,尽管在调试器中查看时显然是正确的" startActivity"。然而,枚举值作为游戏的一部分"物体到达目的地。
在"发送"片段:
detailIntent = new Intent(this, DetailActivity.class);
detailIntent.putExtra(DetailFragment.ARG_CATEGORY, game);
startActivity(detailIntent);
在"接收"片段:
if (getArguments().containsKey(DetailFragment.ARG_CATEGORY)) {
game = (Game) getArguments().getSerializable(DetailFragment.ARG_CATEGORY);
}
我也尝试过:
Bundle bundle = this.getActivity().getIntent().getExtras();
game = (Game) bundle.getSerializable(DetailFragment.ARG_CATEGORY);
这会产生同样奇怪的结果 - 枚举通过,原语不会。
这个问题最令人困惑的部分是我暂时没有触及这段代码。是否有任何其他代码在活动之间的转换之间触及意图?我最好的猜测是它与我的应用程序相关,现在针对更高版本的SDK版本,但不幸的是,我无法在不破坏我的代码的其他部分的情况下还原它,以便测试此理论。
再次,这肯定有效。我之前已经通过意图访问了这些值。
感谢您的时间。
答案 0 :(得分:2)
问题在于我将原语移动到了不可序列化的公共父类。我不知道即使在Serializable对象中,来自非Serializable父级的字段也不会被序列化。
答案 1 :(得分:0)
获取这样的'游戏'对象:
detailIntent.getSerializableExtra(DetailFragment.ARG_CATEGORY)
由于您将游戏“对象”存储在Intent实例上,因此您也可以从Intent实例中检索它。