こんにちわ。
さて、市立図書館で借りた
を参考に
さっそくAndroidプログラミングの独習を始めた。
さっそく1つ目の例題アプリで躓いた(´・ω・`)
アプリの内容は、
①「ボタン」をタップする
②画面上のテキストの内容を「ボタンがタップされました」に変更する
だけ。
簡単そうね!
ところが、参考書当時(2018年)と現在(2022年)との違いが
すぐに出てしまった。
ということで、違いを整理する。
1.Android Studio バージョン
参考書:Android Studio 3.1
当PC:Android Studio 2021.2.1
2.Support Library
参考書の記述
import android.support.v7.app.AppCompatActivity
当PCで自動挿入された記述
import androidx.appcompat.app.AppCompatActivity
Support Libraryについては、v4とv7で選べたが、
2018年に後継として「androidx」が登場した、とのこと。
現在では、「androidx」が主流。
<参考サイト>
※ここは自動挿入の話だから、正直スルーすればOK。
むしろ、自動生成されたソースと
参考書とをわざわざ見比べないと気付かないレベル。
3.synthetic の非推奨
どうやら、「Kotlin Android Extensions synthetic」が非推奨となり、
デフォルトでは使えないらしい。
<参考サイト>
参考書内でもよく使われる
画面上のボタンとか、テキストボックスとかの操作を
簡単に記述できるライブラリが使えない、
というのは、結構大変な話。
回避方法は2つ。
①クラス findViewById を利用
②View Binding を利用
上記参考サイトでも紹介されているView Bindingを使うほうがよさそうだ。
View Binding の使い方については、
以下のサイトが非常に参考になった。
<参考サイト>
私は上記サイトの手順で、
build.gradle への記述追加(ViewBinding有効化)後に「Sync Now」をクリックする、
を忘れてしまって
コードの自動補完が効かない、
という事態に陥ってしまった(´・ω・`)
すぐに解決したけどね(;^ω^)
View Binding を使ったことで、ソースは若干増えたが、
以下のようにほぼ同じ感じで記述できた。
<参考書内ソース>
1 import kotlinx.android.synthetic.main.activity_main 2 3 class MainActivity : AppCompatActivity() { 4 override fun onCreate(savedInstanceState: Bundle?) { 5 super.onCreate(savedInstanceState) 6 setContentView(R.layout.activity_main) 7 8 tapHere.setOnClickListener { 9 binding.textView.text = "ボタンがタップされました" 10 } 11 } 12 }
<今回記述したソース>
1 import com.example.helloandroid.databinding.ActivityMainBinding 2 3 class MainActivity : AppCompatActivity() { 4 5 private lateinit var binding: ActivityMainBinding 6 7 override fun onCreate(savedInstanceState: Bundle?) { 8 super.onCreate(savedInstanceState) 9 // setContentView(R.layout.activity_main) 10 11 binding = ActivityMainBinding.inflate(layoutInflater) 12 val view = binding.root 13 setContentView(view) 14 15 binding.tapHere.setOnClickListener { 16 binding.textView.text = "ボタンがタップされました" 17 } 18 } 19 }
1行目のimportライブラリについては、
<今回記述したソース>の5行目を自動補完しながら記述したら
自動的に挿入された。
何気に見逃しそうになるのだが、
<参考書内ソース>の6行目の記述は、
<今回記述したソース>の11~13に置き換わるので、
<今回記述したソース>では、9行目にてコメントアウトしている。
以上、図書館で借りた古い参考書をもとに
実際に独習してみたら躓いたポイントでした~(^^)ノシ