Activityの画面遷移
KotlinでActivityの画面遷移を勉強します。
- メイン側「Activity-Activity-Transit」と書かれたアクティビティから、サブ側「SubActivity」と書かれたアクティビティに遷移させます。
- 遷移に際して、文字データをSub側におくります。

メイン側 (送り手)
今回の教科書の[Kotlin de Android] 画面遷移をしてみようを参考にされて、画面は作成してみてください。ちなみにプロジェクト名が「Activity_Activity_Transit」にしたので、長くなってますが、ご容赦ください。
ポイントは3つ
- ① Kotlinではstatic(定数)は書けないので、companion objectで書く。これはのちにIntentでデータを渡す際に使用する。(*注 com.exampleで一致させておくほうが良いかも。。勢いコード書いたので。)
- ② 本質とは関係ないがデータが入力されていなかった場合に、注意を出すためのコードです。
- ③ Activity間でデータを共有する際に使用する仕組み「Intent」を作成して、送り先のクラス”SubActivity::class.java”を指定して、putExtraでセット。startActivity(intent)で遷移先の画面を起動する。

package com.example.activity_activity_transit
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
// ①データを送付するためのアドレス
companion object {
const val EXTRA_TEXTDATA = "com.office-fun.Activity_Activity_Transit.TEXTDATA"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
//② データ入力がなかった場合の注意を提起
if (editText.text.toString() == "") {
editText.error = "データを入力してください"
} else {
// SubActivityの開始
// ③-1 Intentでデータを共有
val intent = Intent(this, SubActivity::class.java)
intent.putExtra(EXTRA_TEXTDATA, editText.text.toString())
// ③-2 SubActivityを起動
startActivity(intent)
}
}
}
}
②の実際にデータが入力されていなかった場合の注意の出方
こんな感じで出ます。結構有用かも。

Intentについて
Intentは他のアプリとのデータの共有にも使用する仕組みなので重要。「インテントとインテント フィルタ」など、「Android Intent」などで一通り目を通しておく。(自分に向けて)
サブ側 (受け手)
ポイントは3つ
本筋は②のIntentでのデータの受けとる部分です。
- ① アクションバーをこのような形で追加できます。(Sub側であることがわかりにくいのと、戻る機能を追加したいため)
- ② companion objectで作成したEXTRA_TEXTDATAで指定して、データを取得する。
- ③ アクションバーの動作はこのように書く。戻るボタンのIDは android.R.id.home が割り当てられており、その場合はActivityを終了させて、return trueで戻る。それ以外は親の処理にお任せ。

package com.example.activity_activity_transit
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.MenuItem
import kotlinx.android.synthetic.main.activity_sub.*
class SubActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sub)
// ①ActionBarの追加
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.title = "SubActivity"
// ②データを受け取る
textView.text = intent.getStringExtra(MainActivity.EXTRA_TEXTDATA)
}
// ③ActionBarの動作
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item?.itemId) {
android.R.id.home -> finish()
else -> return super.onOptionsItemSelected(item)
}
return true
}
}
ActionBarと戻るボタン
コードだけで意外に簡単に追加できたので、覚えておきたい。

Kotlin 文法もやっぱり重要
結構、C#からののりそのままで、いろいろなサイト・Javaのサイトを勉強しながら来ているが、文法は勉強していないので、”?”とかが来ると私の頭が「?」とかになる。落ち着いて調べてみた。
「Kotlin文法 – this、等価性、演算子オーバーロード、Null安全、例外」で勉強させてもらったが、そのなかにある、「Null安全」「Nullable型とNullにならない型」が大変勉強になった。
“supportActionBar?.setDisplayHomeAsUpEnabled(true)”となっているので、supportActionBarがnullableなんですねとかがわかる。文法はぼちぼち勉強していきたい。
参考にさせてもらったサイト
Kotlinで勉強しようとすると意外にまだサイトがなくて、いろいろなサイトを参考にさせてもらっています。参考になります。
usacoさんの[Kotlin de Android] 画面遷移をしてみようを実際にKotlinで行ってみました。
KotlinではStaticは書けないので、objecctとcompanion objectで書く。ここも参照。
インテントについては様々な解説があるので、ある程度「Android Intent」で検索してよんでおくと参考になる。
Sub側から戻すときは、[Android] アプリの画面遷移とActivity間のデータ転送で、戻すこと。
