kotlinで、入力した値を次の画面に受け渡す方法について解説します。
前回intentで画面を遷移させる方法について解説しました。
今回はその続きで、
何かしら入力してもらって
入力させた値も受け渡す、ということをやってみましょう。
intentは画面を受け渡すんですが
画面の中の「値」を受け渡すのは、putExtraつーのを使います。
動画
コード
▼activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:ems="10"
android:inputType="textPersonName"
android:hint="Name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btnStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="start"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et" />
</androidx.constraintlayout.widget.ConstraintLayout>
▼MainActivity.kt
package com.example.onamaeapp
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val et:EditText =findViewById(R.id.et)
val btnStart: Button = findViewById(R.id.btnStart)
//1)画面遷移
btnStart.setOnClickListener {
val intent = Intent(this,SecondActivity::class.java)
//2)値を渡す
intent.putExtra("MY_NAME",et.text.toString())
startActivity(intent)
}
}
}
▼activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="こんにちは"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="●●さん"
android:textSize="34sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<Button
android:id="@+id/btnBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="戻る"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvName" />
</androidx.constraintlayout.widget.ConstraintLayout>
▼SecondActivity.kt
package com.example.onamaeapp
import android.annotation.SuppressLint
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
class SecondActivity : AppCompatActivity() {
@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val tvName :TextView = findViewById(R.id.tvName)
val btnBack:Button = findViewById(R.id.btnBack)
// 3)渡された値を取り出す⇒テキストに表示
val myName =intent.getStringExtra("MY_NAME")
tvName.text =myName + "さん"
//4)戻るボタン
btnBack.setOnClickListener{
finish()
}
}
}
テキスト
kotlinで、入力した値を次の画面に受け渡す方法について解説します。
前回intentで画面を遷移させる方法について解説しました。
今回はその続きで、
何かしら入力してもらって
入力させた値も受け渡す、ということをやってみましょう。
intentは画面を受け渡すんですが
画面の中の値を受け渡すのは
putExtraつーのを使います。
入力してもらった情報を
.putExtraで値を渡して、
厳密にはこっちでgetExtraで受け取るわけですが
受け取った値が、ここの●●さんのところに表示される、
というわけです。
例えばyamadaって入れたら
こんにちはyamadaさん、とかですね。
このように
intentとputExtra、厳密にはgetExtraも含めて
セットで使われることが多いので、是非頑張って覚えてください。
レイアウト
割愛
プログラミング
1)intent
それでは、ひとまず前回の復習がてら
Startボタンをおしたら
次の画面に移動するようにしてあげましょう。
画面遷移はintentでしたね。
まずはボタンのviewを取得します。
val et:EditText = findViewById(R.id.et)
val btnStart:Button = findViewById(R.id.btnStart)
で、このボタンを押した時の操作と、インテントを記述します。
//1)画面遷移
btnStart.setOnClickListener{
val intent = Intent(this,SecondActivity::class.java)
startActivity(intent)
}
これで画面遷移ができました。
いったんエミュレータを起動して確認してみましょう。
2)値を渡す
値を渡す、受け取る、というのを書いていきましょう。
ちなみにテンプレート的には
このように書きます。
———————————–
val 変数名 = “Hello!”
intent.putExtra(“KEY”,変数名)
val text = intent.getStringExtra(“KEY”)
データを受け取るときには、
型に合わせてgetStringなどを使います
———————————–
受け渡す方は
putExtraと書いてあげて、
KEYと変数をセットで渡します。
で受け取る側はgetExtraで、KEYを受け取ってあげると
それに紐づいている変数というか値を所得できる、という仕組みになっています。
データを受け取るときには、
型に合わせてgetStringなどを使います。
今回でいうとgetStringExtraですね。
ということで、フォーマットがわかったところで実際書いていきましょう。
↓↓↓
putExtra(name:キー, value:渡す値)
キーの名前は大文字で書くことが推奨されているので⇒(正しくは)大文字・小文字関係ないです
MY_NAMEという名前を付けたい場合は
このようにしてあげます。
実際に渡す値は、
EditTextで入ってきたものなので
etとして
ちゃんと扱えるように変更してあげなければいけません。
で、これも以前やったと思いますが
文字の場合は
et.text.toString()
と書いてあげると、String、つまり文字になったので
別の工程でも扱えるようになりました。
あとは、遷移先で、この「MY_NAME」を受け取ってあげると
それに紐づいている値、今回でいうとetが表示される、ということになります。
3)値を受け取る
putExtraで値を渡したら
遷移先でgetExtraで受け取ってあげます。
second ktを開いてください。
で、お決まりではありますが、こちらもviewを取得しなければいけません。
// 3)渡された値を取り出す⇒テキストに表示
val myName = intent.getStringExtra(“MY_NAME”)
tvName.text = myName + “さん”
4)アクティビティの終了
finish()
5)エラー(注意メッセージ)解説
で、細かいエラーを一応説明しておきます。
ここの動画は基本、小綺麗に書くというより
とにかく動けばOKということで
小さいエラーは極力割愛させていただいているのですが。
Do not concatenate text displayed with setText. Use resource string with placeholders.
と表示されています。
文字列を連結しないで、stringファイルで定義してあげてください、とみたいなことを言っているようです。
まあ、具体的には
+ “さん”
のことですね。
例えばここを消せばエラーは消えます。
まあstringファイルは無視しているので、今までもこのように
注意は出ているんですが。
簡単な対応の仕方はですね、
ここの▼をクリックすると
何やら出てきて、それをクリックすると
@SuppressLint(“SetTextI18n”)
と追加されて
注意メッセージも消えました。
Lintっていうのが
問題点を指摘してくれる解析ツールのことなんですが
Suppressが抑える、控えるという意味なので
この中身はチェックしないでくださいね、という指示になります。
で、今回は18行目はチェックされないので、エラーも消えた、ということです。
まあ、こういうやり方もあるんだなという意味で紹介しておきます。