【Android Studio】Kotlinでつくるクイズアプリ講座 第5回「正解・不正解の判定」

ここまでの記事はこちら
前回クイズを表示することができたので、今回はクイズの正解・不正解を判定してみましょう。
正解・不正解の判定は解答ボタンが押されたときに呼ばれる checkAnswer 関数を使います。
ダイアログを使ってクイズの答えも表示してみましょう。

動画
テキスト
1. クイズの出題数を設定する
まずはクイズを何問出題するかを決めます。
7行目を追加してください。
ここではクイズを5問出題するように設定しました。
出題したクイズは quizData 配列から削除するので、出題数は配列の要素数を超えない範囲に設定してください。
2. checkAnswer 関数
24~46行目を追加します。
3・6・7 行目:必要な import
import android.content.DialogInterface
import android.widget.Button
import androidx.appcompat.app.AlertDialog
が必要になります。
AlertDialog は2つの選択肢が出ると思いますが androidx.appcompat.app.AlertDialog を選択して下さい。
android.app と androidx.appcompat.app はどちらもサポートライブラリですが、新しい androidx を使うことが推奨されています。
25・26行目:どの解答ボタンが押されたかを取得
val answerBtn: Button = findViewById(view.id)
val btnText = answerBtn.text.toString()
押された解答ボタンを見つけて、そのボタンのテキストを取得しています。
29~35行目:正解・不正解の判定
30行目では解答ボタンのテキストと rightAnswer が一致するかで正解・不正解を判定しています。
if (btnText == rightAnswer) {
alertTitle = "正解!"
rightAnswerCount++
} else {
alertTitle = "不正解…"
}
正解の場合は、このあと作成するダイアログのタイトルを「正解!」として、正解数をカウントする rightAnswerCount に1を加算します。
不正解の場合は、ダイアログのタイトルを「不正解…」とするだけです。
38行目~:ダイアログを表示する
38行目からはダイアログを作成しています。
まずはタイトル・メッセージ・OKボタンを追加します。

41~43行目は OK ボタンが押された時に checkQuizCount 関数を呼び出す設定をしています。
44行目の setCancelable はダイアログの外側をタップしたときにダイアログを閉じるかどうかを指定しています。
false にしているので OK ボタンを押さないとダイアログを閉じることはできません。
ダイアログの表示には DialogFragment を使うべきですが、このクイズでは画面を固定すると想定していること、より簡単に実装することを理由にここでは使用していません。
3. checkQuizCount 関数
ダイアログの OK ボタンが押されたときに呼ばれる checkQuizCount 関数を以下のように書きます。
最初に設定した出題数 QUIZ_COUNT と quizCount が同じになったら結果画面に移動します。
QUIZ_COUNT に達していない場合は quizCount に1を足して、再び showNextQuiz メソッドを呼ぶことで、クイズを続けて出題できるようになります。
4. countLabel の更新
最後に「Q1」と表示している countLabel を更新しましょう。
showNextQuiz 関数に3行目を追加します。
クイズ画面を作成した時に strings.xml に
<string name="count_label">Q%d</string>
と書きました。
getString メソッドを使って strings.xml に定義したこの文字列を取得して、第二引数に %d の部分に入れる数値を指定しています。
5. エミュレータで確認
エミュレータでアプリを実行してみて下さい。
正解・不正解の判定が正しく行われ、クイズが連続して出題されるでしょうか?
もし上手く動かない場合は下にサンプルコードを貼ってあるので確認してみてください。
次に行うこと
これでメインのクイズ機能は完成です!
次回からは結果画面を作成していきましょう。