KotlinでAndroidアプリ開発 2. Intent
 Author: ion

buttonに対してon clickのイベントリスナーを設定し、そこに画面遷移の処理を書く。
androidの画面遷移は遷移先を入れたintentをstartActivityに突っ込む。
値を渡したければputExtraでkey:value方式で設定可能。

sendButton.setOnClickListener {
            val intent = Intent(application, Main2Activity::class.java)
            intent.putExtra("key1", "こんにちは")
            startActivity(intent)
}

遷移先でfinish()を呼ぶと閉じて呼び出し元のActivityにもどる。
androidの戻るボタンをおしても同じ挙動になる。

サンプルコード

もともとあるMainActivityに加えてMain2Activityをつくる
android studio画面左のエクスプローラからnew -> Activity
画面遷移のやり方が分かればいいのでconstraintは適当に入れてます。

AndroidManifest.xml

    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme" tools:ignore="GoogleAppIndexingWarning">
        <activity android:name=".Main2Activity"
                  android:label="画面2">
        </activity>
        <activity android:name=".MainActivity"
                  android:label="画面1">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

MainActivity.kt

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        sendButton.setOnClickListener {
            val intent = Intent(application, Main2Activity::class.java)
            startActivity(intent)
        }
    }
}

activity_main.xmlにボタンとテキストビューを追加

    <TextView
            android:textSize="30sp"
            android:layout_margin="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/main" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="16dp"
            app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="27dp" android:id="@+id/textView"
            app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="16dp"/>

    <Button
            android:id="@+id/sendButton"
            android:text="@string/move"
            android:textSize="30sp"
            android:layout_margin="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="16dp"
            android:layout_marginTop="39dp" app:layout_constraintTop_toBottomOf="@+id/textView"
            app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="16dp"/>

Main2Activity.kt

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main2.*

class Main2Activity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)
        returnButton.setOnClickListener{
            finish()
        }
    }
}

strings.xml

<resources>
    <string name="main">Main Activity</string>
    <string name="move">MOVE</string>
    <string name="sub">Sub Activity</string>
    <string name="return_sub">RETURN</string>
</resources>