同じアプリ内でのアクティビティ間の移動

今いるActivityから別のActivityに移動する(同じアプリ内):Android(Kotlin)

やりたい事


ポイント:Intent(インテント)<明示的な使い方>

val intent = Intent(this, 新たに開始するActivityのクラス名::class.java) // (1)
startActivity(intent) // (2)

① 『今いるActivity』と『新たに開始するActivity』についての情報をIntentにセットする
② Intentに記述された情報に基づき、Androidが、新たなActivityを開始する


キーワード

Activity:1つのユーザーインターフェースで1つの画面を表すもの。
Intent:アクションを要求するメッセンジャーのようなもので、Intent(≒行いたいことの意図・目的)をAndroidに送ることで、新たなアクションを行うこと(Activityの開始等)ができる。
なお、Intentは大きく『明示的Intent』と『暗黙的Intent』に分かれる。

明示的Intent
:主に、移動先(開始したいActivity)が明らかになっている、同じアプリ内でのActivity間の移動のために使われる
暗黙的Intent:「メールを送りたい(+送信先・内容)」「電話を掛けたい(+相手の電話番号)」などの意図・目的をAndroidに伝えると、Android側でマニュフェストファイル内に記述のあるコンポーネントの中から適切なものを選んで開始してくれる
※ 情報(ex. メールの送信先や文面・タイトル)を渡すのもIntentの役目

void startActivity (Intent intent):Intentに基づき、Activityを開始する


サンプルコード

MainActivity.kt

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.Gravity
import android.widget.Button
import android.widget.LinearLayout
import android.widget.LinearLayout.*
import android.widget.TextView

class MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)

       // レイアウトの生成
       val txt = TextView(this) // テキストビューを用意
       val btn = Button(this) // ボタンを用意
       LinearLayout(this).apply {
           orientation = LinearLayout.VERTICAL
       }.let{
           setContentView(it)

           // TextViewの生成
           it.addView(txt.apply{
               text = "ここはメイン画面です"
               textSize = 35F
               gravity = Gravity.CENTER // 中央揃え
           })

           // ボタンの生成
           it.addView(btn.apply {
               text = "サブ画面へ移動"
               layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)
           })
       }

       // ボタンが押された時の処理
       btn.setOnClickListener {
           val intent = Intent(this, SubActivity::class.java)
           startActivity(intent)
       }
   }
}

SubActivity.kt

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.Gravity
import android.widget.LinearLayout
import android.widget.TextView

class SubActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)

       // レイアウトの生成
       val txt = TextView(this) // テキストビューを用意
       LinearLayout(this).apply {
           orientation = LinearLayout.VERTICAL
       }.let{
           setContentView(it)

           // TextViewの生成
           it.addView(txt.apply{
               text = "ここはサブ画面です"
               textSize = 35F
               gravity = Gravity.CENTER
           })
       }
   }
}

参考

ガイド:アプリケーションの基礎Android Developers Docs
ガイド:インテントとインテント フィルタAndroid Developers Docs
リファレンス:IntentAndroid Developers Docs
リファレンス:startActivityAndroid Developers Docs

英辞郎:intent



この記事が気に入ったらサポートをしてみませんか?