0
class MainActivity : AppCompatActivity() { 

    companion object { 
     fun makeIntent(pos : Int) { 
      println("${pos} is here!") 
      var intent = Intent(this, DetailActivity::class.java) 
      if (intent != null) { 
       println("intent is not null in makeIntent function") 
      } else { 
       println("intent is null in makeIntent function") 
      } 
     } 
    } 

    ... 
} 

var intent = Intent(...)を実行しているときに意図が表示されません。どうして?コンパニオンオブジェクトでインテントコンストラクタが表示されないのはなぜですか? Kotlin

答えて

2

Intentコンストラクタには、引数として渡されたContextが必要です。内部makeIntentthisは、companion objectのインスタンスへの参照です。コンパニオンオブジェクトには、クラスを含むインスタンスへの参照はありません。したがって、あなたは何とかContextに合格する必要があると思います例えば:

class MainActivity : AppCompatActivity() { 

    companion object { 
     fun Context.makeIntent(pos : Int) { // <- Notice the Context receiver here 
      println("${pos} is here!") 
      var intent = Intent(this, DetailActivity::class.java) 
      // Do what you want with the intent 
     } 
    } 

    ... 
} 
:あなたは makeIntent機能に受信機を追加した場合、あなたはほとんど同じコードを保つことができる@ meinsolの優れた答えに加えて
class MainActivity : AppCompatActivity() { 
    companion object { 
     fun makeIntent(pos : Int, context:Context):Intent { 
      println("${pos} is here!") 
      var intent = Intent(context, DetailActivity::class.java) 
      return intent 
    } 
} 
0

コンテキスト内のどこからでも呼び出すことができます(makeIntent(5))。コンテキストにはないが利用できるものがある場合は、それを使用します(context.makeIntent(5)

関連する問題