2017-05-18 26 views
1

Androidスタジオ3.0カナリーのリリース以来、私はコトリンを学ぼうとしていましたが、私は理解できないことがあります。 ボタンとテキストビューで簡単なアクティビティを作成しようとしていました。 Android Studioがアクティビティをコンテキストとして認識できない理由を理解できません。 私のコードではトーストを作ろうとしますが、と入力するとエラーが発生します。Androidスタジオ3.0サポートコトリン:コンテキストとしてのアクティビティ

エラーは次のとおりです。「指定された引数で次の関数を呼び出すことはできません。そして、赤

コンテキストを強調ここでは、コードです:

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") 
     } 
    } 
} 

事は、私は、コードを実行したとき、私は傷のない、ない実行時例外を取得していないということです。それはので、(あなたがAppCompatActivityに拡張メソッドとしてtoastを宣言しているので、(あなたがその名前の前にAppCompatActivity.入れているので)エラーが発生したコンテキスト

+0

AS/Kotlinプラグインのバグのように見えます。結局のところ、Android Studio 3.0のカナリービルドなので、今は気にしないでください。 –

+0

Kotlin(まっすぐなJava)を使用していない間にもこの問題が発生しています –

+1

btw、このような場合に役立つ美しいAnkoライブラリがあります。 "トースト"は箱の中からまっすぐに出ている - https://github.com/Kotlin/anko/ – Antek

答えて

2

あなたがcom.android.support:appcompat-v7:25.0.1を使うfは、AppCompatActivityとしてを認識ない "コンテキスト・オブジェクト。"

AppCompatActivityクラスは、Android Studioの3.0は、そのクラスを見つけることができないので今度は、BaseFragmentActivityJB

を拡張し、FragmentActivityを拡張し、それがコンテキストとしてAppCompatActivityを受け付けません。

appcompat-v7を25.3.1以上に更新すると問題が解決するはずです。

+1

間違いなく受け入れられた答えでなければならない! +1 – Epicality

0

としてこれを認識し、また、方法としてしないことだけでAndroidのメーカーですクラス内で宣言されています)。 クラス外のメソッド宣言をtoastに移動すると、すべてが機能し始めます。コードから[email protected]を削除することもできます。それは冗長です。 Androidのメーカー3.0で

関連する問題