2017-05-18 52 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];這是多餘的。

相關問題