【Android Studio】Unresolved reference:ActivityMainBinding でviewBindingできない問題

【画像クレジット:Google】

最近、Android Studioでアプリ開発のお勉強を始めた者です。

最初は、Android Studio公式チュートリアルをチャプター3ぐらいまで進めてみましたが、英語の説明を日本語に翻訳しながら進めていたもので、なかなかスンナリ頭に入ってこない&めんどくさくなってしまいました。

少々の息抜きということで、Android Studioに用意されているテンプレートプロジェクトのソースコードを読みながら、実装を学んでいる最中でございます。

そんなテンプレートプロジェクト内に、気になる実装を発見。チュートリアルでは、xmlのviewに存在するTwxtViewなどのコンポーネント?を.ktで呼び出す際に、idを指定して呼び出していましたが、viewBindingを使用することで、findViewしなくていい!!というのです。便利そう!ということで、試してみました。

序盤のチュートリアルで記載されていた呼び出し方(findViewById)

## activity_main.xml
android:id="@+id/result_text"
## MainActivity.kt
val resultText: TextView = findViewById(R.id.result_text)

ただ、これだとidの数だけfindしないといけないの面倒だな~。

viewBindingを使用した呼び出し方

## build.gradle
plugins {
...
    id 'kotlin-kapt'
}

android {
...
    buildFeatures {
        viewBinding = true
    }
}

### buid.gradleを書き換えたら、一旦syncしておきます。
## activity_main.xml
android:id="@+id/text_view"
## MainActivity.kt
import com.example.bindingtest.databinding.ActivityMainBinding

ここまで書いたら、「Build -> Clean Project」「Build -> Rebuild Project」で更新しておきます。そうすると、importのdatabindingが赤くなくなります。しっかり生成されたってことかな??

## MainActivity.kt
class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        val str = "binding success !!!"
        binding.textView.text = str
    }
}

あとはこんな感じで、呼び出すだけで、findViewByIdと同様に使うことができるっぽいです。

参考

developerに記載されているbuild.gradleの方法だと、bindingできませんでした。ktでの呼び出しは問題なかったです。