Android Studio 3.0支持Kotlin:Activity as Context

自从Android Studio 3.0 Canary发布以来,我一直在努力学习Kotlin,而且还有一些我无法理解的东西。 我试图用Button和TextView做一个简单的Activity。 我无法理解为什么Android Studio无法将活动识别为上下文。 在我的代码中,我尝试做一个Toast,但是当我把这个作为参数的上下文时,AS给了我错误。

错误是:“下面的函数都不能用提供的参数来调用”。 并以红色突出显示上下文

代码如下:

class MainActivity : AppCompatActivity() { fun AppCompatActivity.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_LONG).show() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val button = findViewById(R.id.mainButton) as Button button.setOnClickListener{ this@MainActivity.toast("proof") Log.e("asd","proof") } } } 

事情是,当我运行代码时,我没有任何缺陷,没有运行时异常。 这只是Android Studio,并不认为这是上下文

2 Solutions collect form web for “Android Studio 3.0支持Kotlin:Activity as Context”

在Android Studio 3.0中,如果使用com.android.support:appcompat-v7:25.0.1不会被识别为“上下文对象”。

AppCompatActivity类扩展了FragmentActivity ,继而扩展了BaseFragmentActivityJB

由于Android Studio 3.0无法找到该类,因此不会接受AppCompatActivity作为上下文。

更新appcompat-v7到25.3.1或更新版本应该可以解决这个问题。

发生错误的原因是你已经在AppCompatActivity上声明了toast作为扩展方法(因为你已经把AppCompatActivity.放在了它的名字前面),还有一个方法(因为它是在你的类中声明的)。 如果在MainActivity类之外移动toast方法声明,所有东西都应该开始工作。 你也可以从你的代码中移除this@MainActivity ; 这是多余的。

  • Android Studio 3.0中的Plain Kotlin模块,`api`不支持?
  • 从Java转换到Kotlin OnClickListener
  • Kotlin:通过Kotlin中的Data类在Java类中设置一个私有布尔值。 为什么我无法做到这一点?
  • 在kotlin中平台类型的智能广播
  • Gradle花时间看似无所事事
  • 通过使用在超类中定义的相同名称的var来覆盖在接口中定义的val
  • 使用Kotlin功能DSL编写导航配置
  • 原始字符串中的换行是否依赖于平台?
  • Kotlin对象表达式没有按预期工作
  • 在Kotlin函数类型中表示“超级”泛型?
  • 如何在anko中创建标签视图
  • Kotlin language will be the best programming language for Android.