
前回のお名前アプリで
入力した値を、次の画面へ渡す、ということが出来ました。
今回は、
何も入力されなかった場合、
このようにメッセージを表示させるような条件分岐をしてみましょう。
第4回目の計算アプリでやったことの復習になるんですが、
ifを使います。
もし値がなかった場合、それ以外、という風に分けてあげて
値がなかった場合は
トーストでふわっと文字を表示させる。
それ以外の時には、intentで次の画面へ、という風にさせてあげましょう。
動画
コード
▼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
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
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 {
//5)条件分岐
if(et.text.toString()==("")){
//(5-1)トースト
Toast.makeText(this,"何か書いて",Toast.LENGTH_LONG).show()
}else{
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()
}
}
}
テキスト
MainActivity.ktを開いてください。
条件を分岐するのは
スタートボタンをクリックしたときなので
setOnClickListenerの下に書いていきます。
//5)条件分岐
if(条件){
//当てはまる時
}else{
//それ以外
}
となります。
で、それ以外、つまり
入力されていた場合は、次の画面へ行けばいいので
前回までのコードをごっそり入れてください。
//1)画面遷移
btnStart.setOnClickListener {
//5)条件分岐
if(条件){
//当てはまる時
}else{
val intent = Intent(this,SecondActivity::class.java)
//2)値を渡す
intent.putExtra("MY_NAME",et.text.toString())
startActivity(intent)
}
それでは条件の中身、つまり「入力がなかった時」を書いていきましょう。
etのテキストをまずはString型に変更して、
編集型から文字型にしてあげます。
これが空欄と等しい場合、ということなので
.equals("")
ですね。
""が空欄なので
空欄と等しい、という意味になります。
で、第4回目の時に、
文字の場合は、文字で.equalsって書きます、って言ったんですが
javaまではそうだったんですが
kotlinでは文字も数字も、==で書いてOKという風になったようです。
なので、今回はせっかくなので==で書いてみましょう。
これで、エディットテキストの中の文字が
空欄と等しい場合、というのが出来ました。
あとは、空欄だった場合
トーストで、ふわっとメッセージを表示させてあげましょう。
Toast.makeText(this,"何か書いて",Toast.LENGTH_LONG).show()
これももう決まり文句なので、一言一句覚えるというより、
検索したらひな形が出てきますので、必要なところだけ自分なりに書き換える、
というようなやり方でOKです。
以上で完成なので、
エミュレータを起動して確認してみましょう。
おまけ
もしまだ余裕のある方は、アラートダイアログも表示させてみましょう。
AlertDialog.Builder(this)
.setTitle("ERROR!")
.setMessage("数字を入力してください")
.setPositiveButton("OK",null)
.show()


