インターフェースとの連携

ボタンクリックから画面遷移

新規Activityの追加

まずは画面遷移先となる新たなActivityを作成します。

[File] -> [New] -> [Activity] -> [Empty Activity] から新規Activityを作成します。Main Activityと同様に/java/以下にkotlinファイルと/res/layout/以下にxmlファイルが作成されるはずです。


ボタンにクリックイベントを付与 #1

まず、遷移元Activityのkotlinファイルに画面遷移のためのメンバ関数を生成します。

メンバ関数が必要なので遷移元Activityクラスの中に記述するようにしてください

fun nextScreen(view: View) {
    val intent = Intent(this, SecondActivity::class.java)
    startActivity(intent)
}

SecondActivityは遷移先のActivity Nameに置き換えてください)

画面遷移には遷移先のActivityを指定したIntentオブジェクトを使用します。

このIntentをstartActivity関数に渡すことで、画面遷移が行われます。

後はこの関数をトリガーとなるボタンに設定するだけです。

ボタンの[Attributes] -> [onClick] に記述した関数を指定することで、クリックイベント時に関数を発火することができます。

ボタンにクリックイベントを付与 #2

別の方法として、Attributesを変更せずにkotlinのみで記述することもできます。

遷移元のActivityのkotlinファイルのonCreate関数に

nextScreenButton.setOnClickListener {
    val intent = Intent(this, SecondActivity::class.java)
    startActivity(intent)
}

と追記するだけですnextScreenButtonはトリガーとなるボタンのid、SecondActivityは遷移先のActivity Nameに置き換えてください)

setOnClickListener ではコンポーネントをクリックした際のcallback関数を記述することができます。

ここではこのcallback関数として、遷移先のActivityを指定したstartActivityを呼ぶことで、Activityの遷移が発火されるようにしました。

どちらの方法でも、関数内に任意の処理を記述することで、画面遷移に限らず多様な処理をクリックイベントとして設定することができます。

また、ここではボタンを例としましたが、テキストなど様々なコンポーネントにもこの方法でクリックイベントを設定することができます。

テキスト情報とともに画面遷移

今度は先ほどの画面遷移に加え、テキストボックスに入力された文字列を遷移先に渡してみます。

前回同様、まずは画面遷移の関数を記述しましょう。

const val EXTRA_MESSAGE = "com.example.myapplication.MESSAGE"

class MainActivity : AppCompatActivity() {
    ...

    // editText: テキストボックスのid, SecondActivity: 遷移先のActivity名
    fun sendMessage(view: View) {
        val editText = findViewById<EditText>(R.id.editText)
        val message = editText.text.toString()
        val intent = Intent(this, SecondActivity::class.java).apply {
            putExtra(EXTRA_MESSAGE, message)
        }
        startActivity(intent)
    }
}

まず目につくEXTRA_MESSAGEでは"パッケージ名.自由な名前"のStringを宣言しています。このStringは遷移先で欲しい情報を識別するのに使われます。

テキストボックスに入力された文字列を取得するには、findViewByIdでテキストボックスを取得してから、text.toString()を呼びます。

最後にIntentに取得した文字列を追加します。Intentからapplyを呼び、putExtra(識別名, 文字列)を記述しましょう。

あとは遷移先の表示を設定するだけです。

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

    val message = intent.getStringExtra(EXTRA_MESSAGE)
    // textView: テキストのid
    findViewById<TextView>(R.id.textView).apply {
        text = message
    }
}

遷移前の文字列を取得するには、intent.getStringExtra(識別名)を呼びます。

取得した文字列をViewに反映させるには、findViewByIdでViewを取得してから、applyを呼び、textプロパティの値を書き換えます。

文責 若園 (2020.5.28)