2017-05-18 49 views
1

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

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

语境下面的代码:

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{ 
      [email protected]("proof") 
      Log.e("asd","proof") 
     } 
    } 
} 

的事情是,当我运行代码,我没有得到任何瑕疵,没有运行时异常。这只是Android Studio中不承认这是上下文

+0

看起来像AS/Kotlin插件中的一个bug。毕竟这是一个安卓工作室3.0的金丝雀版本,所以现在不用担心。 –

+0

我也遇到这个问题,而不使用Kotlin(只是直接Java) –

+1

顺便说一句,有很多漂亮的Anko库,可以帮助你很多这样的情况 - 例如“吐司”是直接出盒 - https://github.com/Kotlin/anko/ – Antek

回答

2

在Android Studio中3.0 f您使用com.android.support:appcompat-v7:25.0.1AppCompatActivity认可为 “上下文对象。”

AppCompatActivity类延伸FragmentActivity,反过来,延长BaseFragmentActivityJB

由于Android 3.0工作室找不到类,它不会接受AppCompatActivity作为上下文。

appcompat-v7更新为25.3.1或更新版本应解决该问题。

+1

绝对应该是被接受的答案! +1 – Epicality

0

错误发生,因为你已经宣布toast作为AppCompatActivity扩展方法(因为你已经把AppCompatActivity.它的名字前),并且也可以作为方法(因为它是在你的班级内宣布的)。如果您将toast方法声明移到MainActivity类之外,所有内容都应该开始工作。您也可以从您的代码中删除[email protected];这是多余的。

相关问题