原文:https://blog.csdn.net/weixin_55362248/article/details/121999354
原来的写法
class TestFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val id = arguments?.getString("id") ?: ""
}
}
class KotlinActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val id = intent?.getStringExtra("id") ?: ""
}
}
使用委托后,如下
class TestActivity : AppCompatActivity() {
private val id by Extras("id","0")
}
class TestFragment : Fragment() {
private val id by Extras("id","0")
}
可见代码会简洁很多,无需在onCreate中去获取传参。
Extras代码如下
// 新建 Extras 类作为被委托类
class Extras<out T>(private val key: String, private val default: T) {
// 重载取值操作符
operator fun getValue(thisRef: Any, kProperty: KProperty<*>): T? =
when (thisRef) {
// 获取传递给 Activity 的参数
is Activity -> { thisRef.intent?.extras?.get(key) as? T ?: default }
// 获取传递给 Fragment 的参数
is Fragment -> { thisRef.arguments?.get(key) as? T ?: default }
else -> default
}
}