Hel*_*oCW 4 android kotlin kotlin-extension
代码 A 是Context、Fragment和的扩展函数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)
上下文扩展功能应该足够了。您几乎可以在任何有 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)
这些函数可以在活动中使用:
并在一个片段中。我们必须首先获得对 a 的引用,这在逻辑上是正确且有意的Context: