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,并不认为这是上下文

在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 ; 这是多余的。