gpt4 book ai didi

android - 为什么 Bundle in Intent 迷路了?

转载 作者:行者123 更新时间:2023-11-29 01:09:42 31 4
gpt4 key购买 nike

我有一个带有一些参数的Serializable SpecialObject(Location 等依次Serializable)

我想通过处理 SpecialObject 对象,通过 Activity (MySpecialActivity) 打开 fragment (MySpecialFragment)。它到目前为止有效,我可以触发并打开 MySpecialFragmentSpecialObject 没有得到正确处理。感觉只见树木不见森林。

调试它:

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():创建 Intent 以启动 MySpecialActivity createIntent() 方法工作正常。当我debug到它有它的包的 Intent 对象中,而这又具有可序列化的 MySpecialObject 对象。

解包 onCreate():如您在 onCreate() 中所见所有的 extra* 和 bundleExtra* 对象都没有 mMap

以及直接来自 getIntent() 的 getExtras()(在 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

但是在 onCreate 上我不得不将 Intent 复制到 sameIntentsht 中:see here看到 extraextra2mMap !?

最佳答案

一些事情:

  • 在原始代码中,您正在创建一个包含 Bundle 的 Bundle,并将其放入 Intent 中。因此,您拥有一个并非真正必要的 Bundle。您可以直接在 Intent 上调用 putExtra

  • 调用 intent.extrasintent.getExtras() 创建 extras 包的副本。因此,预计您会得到两个不同的 bundle 。

  • 预计当您调试时,extras 有空的mMap。 Bundle 具有惰性语义,只有第一次访问数据的调用才会解包,从而填充 mMap

我猜想您最初是在创建一个包含包含一个 bundle 的 bundle 的 Intent ,但是在访问时您试图跳过一个步骤。我建议删除现有代码并重新开始:

  • 使用 intent.putExtra(EXTRA_SPECIAL, specialObject) 方法创建 Intent 并放置特殊数据;

  • 然后通过调用 intent.getSerializableExtra(EXTRA_SPECIAL) 检索特殊数据。

这就是这里需要的一切。

关于android - 为什么 Bundle in Intent 迷路了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44068552/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com