2022年10月26日水曜日

RecyclerViewでViewとbindingでハマる

すごく疲れたので愚痴ですかねぇ。

RecyclerViewを扱うために、Adapter, Holderを用意して、そこから選択状態などを扱おうとしたところからドはまりの旅が…

Android StudioはDolphin 2021.3.1ベースとなっているプロジェクトの雛形は新規に作り出したものなので、それなりに今風の作りになっているので、ActivityやFragmentではbindingを使う形になっていてリソースのレイアウトを作ると自動的にbindingクラスが用意され、コード上からはそれぞれのクラスが参照できる状態になっていました。

RecyclerViewを追加し、コードはViewベースの実装で行っていましたが、ググった参考記事がbindingが前提となっていたので何も考えずViewベースの記述をbinding形式に変更して変更していったのですが、ドはまりに…

ほとんどの部分では問題なかったのですが、どうもbinding.rootが参照できないという状態に。うまい逃げ方を思い浮かばなかったので、リソースの記述を確認し、不要部分を削ったり書き換えたりしました。が、何も変わらず。AdapterやHolderクラスの記述に問題があるのかもしれないと、色々な個所を書き換えてみましたが変わらず。途方に暮れつつ無駄に2,3日経過。私の中でなんとなくbinding系はまだ実装が不完全なのでは?という結論に。

それと、検索した中に「たまにbindingクラスが不安定」という記述を見受けたので、cleanやリビルドを行ってAndroidStudioの再起動をしてみましたが結果は変わらず。

Android Studioで更新チェックを行い更新してみたのですが、空振りし続けているようなので新たに2021.3.1 Patch 1をインストールし直してみました。

その後、更新チェックを行って環境を更新し、プロジェクトを開くとAGPの更新が通知されたのでそのまま(Android Gradle Plugin version 7.3.1.へ)更新してみました。

更新後コンパイルしてみると見慣れないエラーが表示されるように。

> Task :app:mergeDebugResources FAILED

{"msg":"Found \u003clayout\u003e but data binding is not enabled.\n\nAdd buildFeatures.dataBinding \u003d true to your build.gradle to enable it.",

などなど、どうもなにかbuild.gradleに記述が足りていないということで検索してみるとスタックオーバーフローの記事にそのものずばりの記述が

How to solve 'data binding is not enabled' error while using view binding

 buildFeatures {
        viewBinding true
        dataBinding true
 }

plugins {
     id 'kotlin-kapt'
}

機能を有効にして、プラグインも確認してみては?みたいな。

viewBinding trueはやってたけど、dataBinding trueなの見たことないんですがw

有効にしてみると、見事にbinding.rootが有効になっているようで…

0 件のコメント:

コメントを投稿