スマホアプリつまずきポイント:Kotlin拡張プラグイン/Binding~金宏和實「作ればわかる!Androidプログラミング」

  金宏和和實「作ればわかる!Androidプログラミング」で、スマーホアプリを勉強中です。最新版で対応していない部分について、修正方法を記します。
 今回は、第2章「MainActivity.kt」の編集で発生した、変数名エラーです。
20211210z2a901.jpg


★Kotlinバージョンアップで、プログラムが動かない!
スマホアプリの作成に挑戦中です。以下の書籍に沿って、学んでいます。
・金宏和實著:作ればわかる!Androidプログラミング・Kotlin対応~10の実践サンプルで学ぶAndroidアプリ開発入門、2019/6、翔泳社
20211209za01.jpg

 開発環境の導入から、プログラミング、実機への導入まで、ひととおりの手順が書かれていて、とても分かりやすく実用的な書籍です。ただ、残念なことに、一部のソースコードが、そのままでは動きません。2019年6月の発刊であり、現在までに開発言語「Kotlin(コトリン)」が何度もバージョンアップされていることが原因です。

 2021年12月時点の環境(Android Studio Arctic Fox 2020.3.1 Patch 4)で動作するように、修正をしながら試しています。解決した部分は、当ブログに書きます。同様のエラーでお困りの方に、お役に立てば幸いです。(勉強中の人が書いています。ご指摘などありましたら、ぜひコメントください。)


★第2章:「Kotlin拡張プラグイン」の廃止

◎不具合発生箇所
・対象コード:第2章 p.57 リスト2.5 MainActivity.kt

◎発生状況
ビューの名称(ID名)「morningBtn」「greetingText」などが、エディタ上でエラー表示(赤字)になる。カーソルを当てると、ヒントに「Unresolved reference」と表示される(下図)。
20211210z2a001.jpg

テキストに記載されている(自動入力されるという)「Kotlin Android拡張プラグイン」を手動で記載してみた。しかし、これもエラー表示になる(下図)。
20211210z2a002.jpg


◎原因
 旧バージョン(書籍の時点)では、「Kotlin Android拡張プラグイン」というものがあり、ビューの変数の前に何もつけずに処理ができることになっていました(書籍p.58の記載)。しかし、このプラグインが、最新バージョンでは廃止されているようです。
 最新バージョンでは、 「Binding(バインディング)」という方法で、ビューの参照を行うことになります。その方法を、以下に書きます。

◎対策
以下2つのファイルを修正します。
1)build.gradle(Module: xxxx.app)
2)MainActivity.kt

1)Gradleファイルの修正
 まず1)は、「Gradle(グレードル)」という、ビルダー(必要な要素を集めて、アプリを構成してくれるソフト)の設定ファイルです(推定)。左のファイル一覧から、「Gradle Scripts」を開いて、選びます。「build.Gradle」は2つありますが、薄い字で「Module:xxxx.app」と書いてあるほうを選びます(下図)。
20211210z2a004.jpg

ファイルを開いたら、「android」の中に、「viewBinding」の記載を追加します。下図では、「kotlinOptions」の下に記しました。
20211210z2a003.jpg

 ここで追加したのは、以下の内容です。

viewBinding{
    enabled=true
}

 編集すると、画面上方に「Gradleファイルが変更された」旨のバーが出ます。右にある「Sync Now」をクリックします。処理が終わるまで、しばらくかかります。
20211210z2a008.jpg


2)Kotlinファイルの修正
 次に2)は、下図のように修正します。
20211210z2a005.jpg

 追加・修正したのは、以下の赤字部分です。「setContentView...」の部分は、もともとあった内容を書き換えています。ビューを参照するための「binding」を定義して、以降は「binding」の要素として、各変数を参照すればよい、ということです。
private lateinit var binding: ActivityMainBinding

override fun....
    super...
    binding=ActivityMainBinding.inflate(layoutInflater)
    val view1=binding.root
    setContentView(view1)


    binding.morningBtn...
         binding.greetingText....
    }
    binding.afternoonBtn...
         binding.greetingText....
    }
    binding.eveningBtn...
         binding.greetingText....
    }

 まだ、このままだと、「ActivityMainBinding」がエラー表示(赤字)です。マウスを近づけてヒントを出したら、「Import」をクリックします(下図)。
20211210z2a006.jpg

 これで、必要なファイルの「import」が自動設定されました(下図)。エラー解消です!
20211210z2a007.jpg

◎注意事項
 なお、今回は「binding」の型を「ActivityMainBinding」として宣言しました。しかしこの型名は、アクティビティを記述したXMLファイルのファイル名によって変わります。例えば、書籍4章で登場する「activity_edit.xml」を参照する場合は、「ActivityEditBinding」とする必要があります。


 これにて完動!
20211210z2a901.jpg



Comments

Popular posts from this blog

Privacy Policy: LifePointer - a life counter for TCGs

Privacy Policy: Absolute FFT - visualize frequency of sounds

Privacy Policy: Head or Tail? - An App for Tossing Coins