Kotlin初めて2日目の新米です
「Androidアプリ開発の教科書」という本を参考に勉強しているのですが、
(この本に記載されているコードはこちらで公開されています。)
私の手元にあるのが2018年版のものでKotlinに対応しておらず・・・
javaを自動変換を使いながらKotlinに直してやっているのですが、躓いたところがあるのでメモ
エラー:「Unresolved reference: findViewById」
private class HelloListener implements View.OnClickListener {
@Override
public void onClick(View view) {
EditText input = findViewById(R.id.etName);
TextView output = findViewById(R.id.tvOutput);
String inputStr = input.getText().toString();
output.setText(inputStr + "さん、こんにちは!");
}
}
という処理を自動変換で直したところ、
private class HelloListener : View.OnClickListener {
override fun onClick(view: View) {
val input: EditText = findViewById(R.id.etName)
val output: TextView = findViewById(R.id.tvOutput)
val inputStr = input.text.toString()
output.text = inputStr + "さん、こんにちは!"
}
}
このようになりました。
しかし、こちらのコードだと
Unresolved reference: findViewById
というエラーが出てしまいました。
調べてみたところ、
Kotlinでは内部クラスから外のメソッドや変数などを使用したい場合、innerクラスであることを明示しなければならないようです。
findViewById
メソッドは親クラスのAppCompactActivity.java
のメソッドなので、
使う際には、HelloListener
クラスがinnnerである事を明示します。
private inner class HelloListener : View.OnClickListener {
override fun onClick(view: View) {
val input: EditText = findViewById(R.id.etName)
val output: TextView = findViewById(R.id.tvOutput)
val inputStr = input.text.toString()
output.text = inputStr + "さん、こんにちは!"
}
}
これで無事findViewById
メソッドを使えるようになりました
理由について詳しく説明している記事↓
Kotlin - 内部クラスとネストされたクラス