首页 > 解决方案 > StartActivityForResult 不适用于 Kotlin 扩展函数?

问题描述

这是我为启动活动以获取结果而创建的扩展功能,但是活动正在开始,但我没有接到电话onActivityResult

inline fun <reified T : Any> Activity.launchActivity(
requestCode: Int = -1,
noinline init: Intent.() -> Unit = {}
) {
val intent = Intent(this, T::class.java)
intent.init()
startActivityForResult(intent, requestCode)
}

onActivityResult 回调

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    Timber.d("onActivityResult".plus(OrderProductFragment::class.java.simpleName))

在 a 中调用扩展Fragment

(context as Activity).launchActivity<CartActivity> (1234) {
                putParcelableArrayListExtra(getString(R.string.cart_items_key), cartItems)
            }

标签: androidandroid-intentkotlin-android-extensionsstartactivityforresult

解决方案


您需要 setResult()在导航回fragmentactivity您来自哪里时调用它,即

setResult(Activity.RESULT_OK, intent)

这将onActivityResult()在您的activityfragment班级中调用

例子

                    val intent = intent
                    intent.putExtra("key", "put values if you want")
                    setResult(Activity.RESULT_OK, intent)
                    finish()

推荐阅读