【はじめてのKotlinプログラミング(17)】空文字判定(if文とToast)

前回作ったアプリで
何も入力されなかった場合、
このように、空文字のまま次の画面へ行ってしまいます。

なので、空文字の場合は、エラー処理というか、
下に何かしらメッセージを表示させてあげる、
という処理を追加してあげましょう。

if文を使って
もし空っぽだったら、エラーメッセージ
それ以外はintentで次の画面へ振り分けてあげます。

ちなみに、Toastのひな型的には下記のようになります↓↓

Toast.makeText(this,"メッセージ",Toast.LENGTH_LONG).show()

動画

コード

▼avtivity_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">


    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:text="キャッチコピー自動生成アプリ"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <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="アイテムを入力してね"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <Button
        android:id="@+id/btnStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:text="自動生成"
        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.catchphrasekt

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

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //1)viewの取得
        val et:EditText = findViewById(R.id.et)
        val btnStart:Button=findViewById(R.id.btnStart)

        //2)画面を渡す(intent)
        btnStart.setOnClickListener {
            //10)条件分岐(空文字と、それ以外)
            if(et.text.toString()==""){
                Toast.makeText(this,"何か書いて",Toast.LENGTH_LONG).show()
            }else{
                val intent = Intent(this,ResultActivity::class.java)

                //3)値を渡す
                intent.putExtra("MY_ITEM",et.text.toString())

                startActivity(intent)
            }
        }
    }
}

▼activity_result.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=".ResultActivity">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:text="【新キャッチコピー】"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tvResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:text="●●です"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2" />

    <Button
        android:id="@+id/btnReplay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="24dp"
        android:text="Replay"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

▼ResultActivity.kt

package com.example.catchphrasekt

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import java.util.*

class ResultActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_result)

        val tvResult:TextView=findViewById(R.id.tvResult)
        val btnReplay:Button=findViewById(R.id.btnReplay)

        //4)値を受け取る⇒テキストに表示
        val myItem =intent.getStringExtra("MY_ITEM")
        //tvResult.text = myItem

        //5)配列を用意
        val msgData = arrayOf(
            " 女子高生が選ぶ『 $myItem 』ランキング",
            "100円ショップにあるものだけで『 $myItem 』を作る",
            " 世界の富豪が実践する3つの『 $myItem』",
            " 逆に今『 $myItem 』がナウい!",
            " 世界は『 $myItem 』で出来ている",
            " 彼のハートを打ち抜く神『 $myItem 』",
            " 衝撃!『 $myItem 』だけで1ヵ月生活",
            " あなたの知らない『 $myItem 』の世界",
            " 今からはじめる『 $myItem 』",
            " 乳酸菌が100億個入った『 $myItem 』",
            " 100年に1度の『 $myItem 』",
            " 愛と『 $myItem 』の物語",
            " 世界よ!これが真の『 $myItem 』だ!!",
            " あのカリスマ『 $myItem 』、待望の映画化!",
            " 今年最高の『 $myItem 』をお届け",
            " あの素晴らしい『 $myItem 』をもう一度",
        )

        //7)乱数を作る
        //val num = Random().nextInt(16)
        val num = Random().nextInt(msgData.count())

        //6)配列の0番目を表示
        //8)num番目を表示
        tvResult.text=msgData[num]

        //9)リプレイボタン
        btnReplay.setOnClickListener {
            finish()
        }

    }
}

テキスト

if文を使って
もし空っぽだったら、エラーメッセージ
それ以外はintentで次の画面へ振り分けてあげます。

ということで、書く場所は、btnStartを押した時なので、
btnStart.setOnClickListener{
の下に書いてあげます。

//10)条件分岐(空文字と、それ以外)

if(et.text.toString()==””){
//メッセージ
}else{
//次の画面
}

という風に書いてあげます。

で、それ以外の場合は、intentで渡してあげればいいので
前回までのコードをそのまま貼り付け。

*******************************
で、空文字だった時のメッセージの出し方は色々ありますが

1つは、画面の下に、ふわっと文字を出すトースト、
それからもう1つは
ダイアログボックスを表示させるアラートダイアログ、とかがメジャーどころになりますが
アラートダイアログはつい最近四択クイズでもだいぶ使ったので
今回は久々にトーストをつかって、ふわっとメッセージを表示させてあげたいと思います。
*******************************

 

まあ、これももう完全に決まり文句なので、
一言一句覚えるというよりは「Toast」っていうキーワードだけ覚えて、
必要なときに検索して、ひな形を使うようにしてください。
一言一句覚えようとすると挫折の元です。

Toaって入れるとToastが出てくるので選択。

Toast.makeText(this,”何か書いて”,Toast.LENGTH_LONG).show()

はい、これで、etの文字が空っぽだったらトースト
そうじゃない場合は、インテントで次の画面へ行っていると思いますので、
エミュレータを起動して、確認してみましょう。

**************************

まずは空っぽでボタンを押すと、はい、このように、ふわっとメッセージが出てきました。
これ、トースターからパンがふわっと出てくるのと似ているのでトーストと言うそうです。

それでは、実際、文字を入れて、ちゃんとキャッチコピーが生成されるかも確認してみましょう。

「りんご」

はい、無事、キャッチコピーが作られたようです。
リプレイボタンで、元に戻っているのでOKですね。

以上、今回はif文で、空文字とそれ以外の条件分岐をやってみました。
もし余裕のある方は、トースト以外にも、アラートダイアログを表示するコードも書いてみてください。

コメントを残す