[Kotlin] Activity-Activity間の画面遷移

本文上広告1



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間のデータ転送で、戻すこと。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする