KotlinでfindViewByIdを扱うとき
AndroidStudioにて開発しています。
Javaにおける以下のコードを、Kotlinで実装したいと考えています。
java
1public class Test extends AppCompatActivity { 2 @Override 3 protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.activity_test); 6 } 7 8 private class HelloListener implements View.OnClickListener { 9 @Override 10 public void onClick(View view) { 11 EditText input = findViewById(R.id.etName); 12 } 13 } 14} 15
これをKotlinで以下の通り書き換えました。
Kotlin
1class Test : AppCompatActivity() { 2 3 override fun onCreate(savedInstanceState: Bundle?) { 4 super.onCreate(savedInstanceState) 5 setContentView(R.layout.activity_test) 6 } 7 8 private class HelloListener : View.OnClickListener { 9 override fun onClick(view: View?) { 10 val input : EditText = findViewById(R.id.etName) 11 } 12 } 13}
すると、KotlinではfindViewById
がUnresolved reference
になってしまいます。
KotlinもJavaと同様、AppCompatActivity
を継承しているので、そのメソッドを使えるのではないかと考えていたのですが、そのまま使うことができません。
この理由をご教授いただけないでしょうか。
ご回答ありがとうございます!
keicha_hrsさんのご提示いただいた方法で通りました!
また自分で試していて気づいたのですが、内部クラスから外のメソッドや変数などを使用したい場合、
Kotlinだと明示的にinner
クラスであることを書かなければなりませんでした。
Kotlin
1class Test : AppCompatActivity() { 2 3 override fun onCreate(savedInstanceState: Bundle?) { 4 super.onCreate(savedInstanceState) 5 setContentView(R.layout.activity_test) 6 } 7 8 private inner class HelloListener : View.OnClickListener { 9 override fun onClick(view: View?) { 10 val input : EditText = findViewById(R.id.etName) 11 } 12 } 13}
Javaではわざわざこんな書き方をしなくても内部クラスより外のクラスで定義されているメソッドや変数を呼び出すことができましたが、Kotlinではinnner
と明記する必要があります。
Javaだと無意識にやっていたことも、Kotlinだと意識させられるので勉強になりました…
ありがとうございます!

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/24 14:58
2019/03/25 03:42