はじめてのAndroidプログラミング② | SEの徒然草

SEの徒然草

SEしています。タイトル通り、まぁ、雑多なジャンルについて、つれづれなるままに、投稿します。

こんにちわ。

 

さて、市立図書館で借りた

『はじめてのAndroidプログラミング 第3版』

を参考に

さっそく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行目にてコメントアウトしている。

 

 

 

以上、図書館で借りた古い参考書をもとに

実際に独習してみたら躓いたポイントでした~(^^)ノシ