android - 使用方法扩展和继承时名称冲突

标签 android kotlin kotlin-extension

我有一个扩展

fun Fragment.showToast(message: String, toastLength: Int = Toast.LENGTH_SHORT) {
    Toast.makeText(context, message, toastLength).show()
}

在项目中我们使用 MVP:

interface MyContract {
    interface View {
        fun showToast(message: String)
    }
}

class MyFragment : Fragment(), MyContract.View {
    override fun showToast(message: String) {
        showToast(message)
    }
}

所以在 MyFragment.showToast(message) 中我希望调用扩展函数而不是 StackOverflowException

是否可以直接调用扩展函数?像这样的东西:

Fragment.showToast(this, message)

或者我只需要提供另一个名字?

最佳答案

您可以将 MyFragment 类转换为 Fragment 并执行:

class MyFragment : Fragment(), MyContract.View {
    override fun showToast(message: String) {
        val fragment = this as Fragment
        fragment.showToast(message)
    }
}

这样你就会引用到Fragment类的扩展函数

关于android - 使用方法扩展和继承时名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54746863/

相关文章:

android - 在 Android 应用上标记照片

android - 可选查询参数不适用于 Room

使用 kotlin 和 greendao 的 Android Studio 3.0 Proguard 返回 ClassLookupException

java - Kotlin 的多平台依赖问题

Android Realm 数据库不更新记录

android - 不使用任何库的Google Analytics(分析)

android - 软键盘进来后,如何保持部分组件固定?

android - 在 Kotlin 中设置 startActivity() 时类型不匹配

kotlin - 如何在Kotlin CoRoutine中编写rx concatArrayEager等效项?

android - Android 3.1 稳定版更新后的 Gradle Sync 问题 Kotlin