前回のお名前アプリで
入力した値を、次の画面へ渡す、ということが出来ました。
今回は、
何も入力されなかった場合、
このようにメッセージを表示させるような条件分岐をしてみましょう。
第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()