現在の言語: 日本語

戻る

Unresolved reference 'binding'.
Android Studioエラー

今回のケースは、エラー回避のメモとして残しているものです。
実行前にバックアップを取ってから修正することをおすすめします。
また、この内容を実行しても、必ずしもエラーが回避するとは限りません。
自己責任のもと、行っていただけますよう、お願いします。

例えば画面のIDをMainActivityと仮定します。
MainActivityというActivityのBASICで追加してエラーがなかったのですが 急にエラーがでてしまいました。
赤い文字にマウスカーソルを合わせると下記のエラーが発生しました。
[エラー]
Unresolved reference 'binding'.
以前もこのようなことがあり、この対策として
一度、エラーのファイルを削除して再作成をしたところ、bindingが認識してエラーを回避できていました。
しかし、今回は、同じようにしても、エラーが残ったままとなってしまいました。
[テストした例]
MainActivityを削除して プロジェクトで右クリックをして
New->ActivityでBasic Views Activityを選択して MainActivityを入力して保存
前回動いていた内容をコピーして同じように実装

上記のように実行しても、今回はエラーが回避できなかったため
バックアップのアプリを別ウィンドウで開いてみました。
すると、こちらではエラーが発生しませんでした。
[確認した例]
エラーが起きたプロジェクト名をappと仮定すると
バックアップを取っておいたapp_20251220_1 をOpenでNew Windowで開くと MainActivityのエラーはありませんでした。

そこで、バックアップをエラーが起きているプロジェクト名に変更して開いていみることにしました。
[実行した手順の例]
エラーが表示されているプロジェクトappを閉じて appを削除
そしてapp_20251220_1をappに変更して 再度開きました。

結果はバックアップではエラーが発生しなかったのにもかかわらず、
プロジェクト名を同じにすることでエラーが発生しました。
おそらく、なにか、内部で保存されていると思うのですが、
Build-> Clean And Assemble Project with Tests
を実行してもエラーは消えませんでした。
今回のケースでは、下記の方法で対処できました。

Invalidate Caches / Restartを実行
Android Studioのキャッシュが壊れてると、謎のエラーが出ることがあるようです。

メニューから File → Invalidate Caches / Restart...Invalidate and Restart を選択します
このとき、Android Studioプロジェクトは再起動のため一度自動的に閉じました。
一度閉じたAndroid Studioプロジェクは自動的に起動して、
更新処理をしてくれるので、そのまま待機していました。
※インターネット接続をしておきました。

しかし、これ以外にも解消する可能性の方法があるようですので
伏せて記述しておきます。

ViewBindingが有効になっているか確認
※build.gradle (Module: app) を開いて、viewBinding が有効になっているか確認してください。
[Kotlin]
android {
    ...
    buildFeatures {
        viewBinding true
    }
}
追加したら「Sync Now」を実行してください。

クリーン&リビルドを実行
Build メニューから
(1) Clean Project
(2) Clean And Assemble Project with Tests
を順番に実行します。
キャッシュが悪さしてることがあるらしいです。
上記操作により、内部キャッシュがクリアされて、bindingの生成もリセットされる可能性があるようです。

プロジェクト名変更の影響の可能性について
プロジェクト名を変更したときに、
.idea フォルダや .gradle フォルダ、build フォルダ
キャッシュが悪さしてることがあるらしいです。
が古い情報を持ってることがあるようです。

(1) プロジェクトを閉じる
(2) app/.idea, app/.gradle, app/build フォルダを削除
(3) Android Studioで再度プロジェクトを開く
(4) Gradle Sync → Clean → Rebuild
bindingの使い方を再確認
private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
}
activity_main.xmlレイアウトファイルが問題なく存在してるかについても確認してください。

[エラー]
Unresolved reference 'inflate'.

binding = RESULT_OK.inflate(layoutInflater)
上記ステップになっている箇所がありました。
RESULT_OK は Android にもともと用意されている定数で、値は -1。
「結果が成功」という意味で、startActivityForResult() の戻り値として使われているものです。
この RESULT_OK に対して .inflate(layoutInflater) を呼び出すのは完全に意味不明なコードとなります。
RESULT_OK はInt(数字)です。
Int 型には inflate() にはメソッドは存在しません。
Android Studioのテンプレートや補完機能によりコードを挿入することがあります。
binding = ActivityMainBinding.inflate(layoutInflater)
と実装しようとしたときに
ActivityMainBinding がまだ生成されていなかったことがいえます。
例えば タグがない等があげられます。
その結果、補完候補に RESULT_OK しか出てこなくて、うっかり選んでしまったことなどが考えられます。
そのため、下記のように修正することで、上記エラーが修正されました。
binding = ActivityMainBinding.inflate(layoutInflater)
※ActivityMain.ktを例とした場合となります。





戻る

著作権情報
ホームページおよプリ等に掲載されている情報等については、いかなる保障もいたしません。
ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、
または公開したりすることはできません。
当方は、ホームページおよびアプリ等を利用したいかなる理由によっての障害等が発生しても、
その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について
一切の責任を負わないものとします。