如何优化 Kotlin 中 Context、Fragment 和 Activity 扩展功能的代码?

Hel*_*oCW 4 android kotlin kotlin-extension

代码 A 是ContextFragment和的扩展函数Activity

我认为这是多余的,我该如何优化它?

代码A

    fun Context.toast(msg: String){
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show()
    }
    
    fun Context.toast(@StringRes resId: Int){
        toast(getString(resId))
    }
    
    fun Context.toast(@StringRes resId: Int,msg: String){
        toast(getString(resId) + msg)
    }
    
    fun Context.toast(msg: String,@StringRes resId: Int){
        toast(msg + getString(resId))
    }
    
    //------------------------------------------------

    fun Fragment.toast(msg:String) {
        requireContext().toast(msg)
    }
    
    fun Fragment.toast(@StringRes resId: Int) {
        toast(requireContext().getString(resId))
    }
    
    fun Fragment.toast(@StringRes resId: Int, msg: String) {
        toast(requireContext().getString(resId) + msg)
    }
    
    fun Fragment.toast( msg: String, @StringRes resId: Int) {
        toast(msg+ requireContext().getString(resId))
    }
    
    //------------------------------------------------

    fun Activity.toast(msg: String){
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show()
    }
    
    fun Activity.toast(@StringRes resId: Int){
        toast(getString(resId))
    }
    
    fun Activity.toast(@StringRes resId: Int,msg: String){
        toast(getString(resId) + msg)
    }
    
    fun Activity.toast(msg: String,@StringRes resId: Int){
        toast(msg + getString(resId))
    }
Run Code Online (Sandbox Code Playgroud)

Jen*_*anu 6

上下文扩展功能应该足够了。您几乎可以在任何有 UI 组件可用的地方使用它。

我们可以删除 的扩展,Activity因为它Activity是类的间接子类Context

我们还可以删除Fragment扩展,因为它们在片段附加到活动(即上下文)之前没有用处。

fun Context.toast(msg: String){
    Toast.makeText(this, msg, Toast.LENGTH_LONG).show()
}

fun Context.toast(@StringRes resId: Int){
    toast(getString(resId))
}

fun Context.toast(@StringRes resId: Int,msg: String){
    toast(getString(resId) + msg)
}

fun Context.toast(msg: String,@StringRes resId: Int){
    toast(msg + getString(resId))
}
Run Code Online (Sandbox Code Playgroud)

这些函数可以在活动中使用:

Activity中扩展函数的使用

并在一个片段中。我们必须首先获得对 a 的引用,这在逻辑上是正确且有意的Context

Fragment中扩展函数的使用