LoginSignup
0
0

More than 3 years have passed since last update.

[Kotlin]「Androidアプリ開発の教科書」のKotlin化の際に起きた「Unresolved reference: findViewById」エラー

Last updated at Posted at 2020-11-27

Kotlin初めて2日目の新米です:rice:

「Androidアプリ開発の教科書」という本を参考に勉強しているのですが、
(この本に記載されているコードはこちらで公開されています。)

私の手元にあるのが2018年版のものでKotlinに対応しておらず・・・

javaを自動変換を使いながらKotlinに直してやっているのですが、躓いたところがあるのでメモ:writing_hand:

エラー:「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メソッドを使えるようになりました:sparkles:

理由について詳しく説明している記事↓
Kotlin - 内部クラスとネストされたクラス

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0