我有一个带有一些参数的Serializable
SpecialObject(位置等依次为Serializable
)
我想通过处理MySpecialFragment
对象,通过活动(MySpecialActivity
)打开片段(SpecialObject
)。到目前为止,我可以触发并打开MySpecialFragment
,但SpecialObject
未正确处理。我觉得我无法看到森林中的树木。
调试它:
val PARAM_BUNDLE = "bundle_extra"
val PARAM_SPECIAL_EXTRA = "special_bundle_extra"
class MySpecialActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my_special)
val sameIntentSht = intent // same as getIntent()
val extras = intent.extras // same as getIntent().getExtras()
val bundleExtras = intent.getBundleExtra(PARAM_BUNDLE)
val extras2 = sameIntentSht.extras
val bundleExtras2 = sameIntentSht.getBundleExtra(PARAM_BUNDLE)
if(extras != null && extras2 != null && bundleExtras != null && bundleExtras2 != null) Timber.d("Jzst for debugging")
FragmentHelper.inflateFragment(this, R.id.fragmentContainer, MySpecialFragment::class.java, extras)
}
companion object {
fun createIntent(context: Context,
mySpecial: MySpecialObject?): Intent {
val intent = Intent(context, MySpecialActivity::class.java)
val bundle = Bundle()
mySpecial?.let {
bundle.putSerializable(PARAM_SPECIAL_EXTRA, mySpecial)
}
intent.putExtra(PARAM_BUNDLE, bundle)
// intent.flags = FLAG_ACTIVITY_NEW_TASK
return intent
}
}
}
实例化createIntent():创建意图以启动MySpecialActivity createIntent()
方法正常工作。当我进入intent对象时,它有它的bundle,而后者又有Serializable MySpecialObject对象。
解压缩包装onCreate():正如您在中看到的那样,所有额外的*和bundleExtra *对象都不具备mMap
getExtras()直接来自getIntent()(在Kotlin intent.extras 中)
与sameIntentSht不同,它显然是相同的val sameIntentSht = intent
。你在调试中看到intent.extras有652个字节,sameIntentSht.extras有604个字节!??!?
如何正确处理此捆绑包?
编辑: 我使用了RubenGees的建议。到目前为止工作:
val intent = Intent(context, MySpecialActivity::class.java)
mySpecial?.let {
intent.putExtra(PARAM_SPECIAL_EXTRA, mySpecial)
}
// intent.flags = FLAG_ACTIVITY_NEW_TASK
return intent
答案 0 :(得分:1)
一些事情:
在原始代码中,您正在创建一个包含Bundle的Bundle,并将其放入Intent中。因此,您有一个并非真正必需的Bundle。您可以直接在意图上调用putExtra
。
致电intent.extras
或intent.getExtras()
会创建额外包的副本。所以预计你会得到两个不同的包。
预计在调试时,extras
为空mMap
。 Bundle具有惰性语义,只有访问数据的第一个调用才会对其进行解组,从而填充mMap
。
我猜你最初创建的Intent包含一个包含Bundle的Bundle,但在访问时你试图跳过一步。我建议删除现有代码并重新开始:
使用intent.putExtra(EXTRA_SPECIAL, specialObject)
方法创建Intent并放置特殊数据;
然后通过调用intent.getSerializableExtra(EXTRA_SPECIAL)
检索特殊数据。
这就是这里所需的一切。