今回はAndroidアプリで画面遷移を行う時に使用するIntent(インテント)を使ってみます。
画面が一つしかないアプリってのは凄く少なくて、
殆どの場合が画面遷移が必要な複数画面のアプリだと思うので、必須項目だと思うよ
昔、何も知らない頃に作ったAndroidアプリは、一つのActivityに複数画面分のViewを配置して
画面遷移の度に、表示非表示を切り替えるとか凄いバカな作りをしちゃってたよ。
やっぱり、何事もある程度勉強してから進めるべきだねー
準備(Activityを二つ用意する)
まずは、起動元と起動先Activityを二つ作ります。
Activityの作り方は下の記事を参考にして下さい。
(一応、下の記事でもIntent使ってるけどねー)
【Android Studio】はじめの一歩 入力した値を次の画面へ渡すよ
続きを見る
起動元Activityの処理
起動元のActivityにはボタンを一つ配置して、ボタン押下の処理を追加します。
ボタン押下した際の処理は以下です。
fun onNextButtonClick(view : View) {
val intent = Intent(this, SubActivity::class.java)
intent.putExtra("Text1", "Intentで渡す一つ目の内容")
intent.putExtra("Text2", "Intentで渡す二つ目の内容")
intent.putExtra("Number", 1234567890)
startActivity(intent)
}
順番にみていきましょー
val intent = Intent(this, SubActivity::class.java)
まずは、Intentを作成します。
一つ目の引数はコンテキストなので、thisを指定
二つ目の引数はクラスなので、起動するアクティビティのJavaクラス化したものを指定
今回は、サブアクティビティなので「SubActivity::class.java」です。
Kotlinでは、クラス名::class.javaでクラスをjavaのクラス化出来るらしいよ
intent.putExtra("Text1", "Intentで渡す一つ目の内容")
intent.putExtra("Text2", "Intentで渡す二つ目の内容")
intent.putExtra("Number", 1234567890)
起動先アクティビティにデータを渡す為にデータセットしている部分だよ
一つ目の引数がデータの名称、二つ目の引数がデータとなっています。
データの名称は分かり易いように名前つければいいと思うよ
今回は、文字列を二つと数値を一つわたしてます。
startActivity(intent)
起動先アクティビティを起動するよ
作ったIntentを渡すだけでOK
起動先Activityの処理
起動先のアクティビティは受け取ったデータを表示する為のTextViewを4つ用意しています。
データを受け取る部分の処理を見ていきましょー
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sub)
val textview1 = findViewById<TextView>(R.id.textView_1)
textview1.text = intent.getStringExtra("Text1")
val textview2 = findViewById<TextView>(R.id.textView_2)
textview2.text = intent.getStringExtra("Text2")
val textView3 = findViewById<TextView>(R.id.textView_3)
textView3.text = intent.getIntExtra("Number", 0).toString()
val textView4 = findViewById<TextView>(R.id.textView_4)
textView4.text = intent.getIntExtra("Text2", 0).toString()
}
TextViewは4つあって、上二つは文字列をgetStringExtraでデータ取得
三つ目は数値をgetIntExtraでデータ取得、最後の一つは文字列をgetIntExtraでデータ取得してるよ
例に二個目と三個目を抜き出して解説
val textview2 = findViewById<TextView>(R.id.textView_2)
textview2.text = intent.getStringExtra("Text2")
val textView3 = findViewById<TextView>(R.id.textView_3)
textView3.text = intent.getIntExtra("Number", 0).toString()
1行目と4行目はそれぞれTextViewを取得している部分
2行目はintentから「Text2」ってデータ名称のデータを文字列で取得している
5行目はintentから「Number」ってデータ名称のデータを文字列で取得している
getIntExtraは一つ目の引数がデータ名称で、二つ目の引数はデフォルト値です
取得してみたら数値ではなかった場合等にデフォルト値がセットされるよ
画面遷移の確認
実際に動かしてみます。
起動元のアクティビティで「次ページ」ボタンを押下します。
起動先のアクティビティが表示されます。
受け渡したデータが取得出来ているか見てみましょう
まず、渡したデータを復習しときましょうね
intent.putExtra("Text1", "Intentで渡す一つ目の内容")
intent.putExtra("Text2", "Intentで渡す二つ目の内容")
intent.putExtra("Number", 1234567890)
1行目は、「Text1」の内容を[getStringExtra]で取得したものです
2行目は、「Text2」の内容を[getStringExtra]で取得したものです
3行目は、「Number」の内容を[getIntExtra]で取得したものです
4行目は、「Text2」の内容を[getIntExtra]で取得して、数値変換できないのでデフォルト値がセットされてます
こんな感じで、putExtraでデータを渡して、get○○Extraでデータの読み込みが出来ます
暗黙のIntent
Intentは自アプリ内でアクティビティの起動に使う以外に別のアプリのアクティビティを開始することも出来ます。
暗黙のIntentって呼ばれてるらしいよ
地図アプリを起動したり、カメラアプリを起動して写真を撮ったり、電話アプリを起動して電話したりとか出来るらしいけど、
エミュレータのデバッグ環境でうまく動作しなかったので、
今後、実装出来て動きの確認等出来たら、改めて別記事にしたいと思います。
おわりに
アクティビティの起動や別アプリの起動が出来るIntent
使いこなせれば色々なアプリを作れそうですね。
アクティビティの起動は複数画面のアプリを作る事になれば必須の処理なので
絶対習得しておきたいですね
ちょっと中途半端ではありますが、今回はここまでー
おつかれさまでしたー