4択クイズアプリ(Kotlin)

【Android Studio】Kotlinでつくるクイズアプリ講座 第4回「問題と選択肢の表示」

Sara

Android Studio Ladybug | 2024.2.1 に対応しました(2024年11月)

ここまでの記事はこちら
Java バージョンはこちら

前回はクイズを出題するための用意をしました。

今回はリストからクイズを取り出して、実際にクイズ画面に表示してみましょう。

問題と選択肢を表示する

1. 問題と選択肢をセットする

showNextQuiz 関数に以下のコードを書きます。

3行目では quizData リストの0番目のクイズを取り出しています。 

取り出したクイズは

mutableListOf("問題", "正解", "選択肢1", "選択肢2", "選択肢3")

という順番で要素が入っています。

それぞれ取り出して questionLabel と answerBtn にセットしていきます。

2. showNextQuiz 関数を呼び出す

アプリを起動したらすぐにクイズが出題されるように、onCreate 関数内で showNextQuiz 関数を呼び出します。

9行目を追加します。

3. アプリを実行する

アプリをエミュレータで実行してみましょう。

quizData リストの最初の要素である「北海道」の問題と選択肢が表示されたでしょうか?

4. 出題順をシャッフルする

MutableList には要素をシャッフルする shuffle 関数が用意されています。

たった1行書くだけで出題順をシャッフルすることができます。

6行目を追加します。

5. 選択肢をシャッフルする

次はボタンに表示する選択肢をシャッフルします。

MutableList の中に MutableList を入れた2次元リストにしたので、取り出した quiz も MutableList 型になっています。

同じように shuffle 関数を使いますが、今回は都道府県を取り出してからシャッフルします。
 

showNextQuiz 関数を以下のように書き換えます。

9行目

quiz リストは

mutableListOf("問題", "正解", "選択肢1", "選択肢2", "選択肢3")

となっています。

“正解”は正誤判定をするために使いたいので、シャッフルする前に取り出しておきます。

12行目

quiz.removeAt(0)

都道府県名はボタンに表示する選択肢ではないので削除しておきます。

15行目

quiz.shuffle()

都道府県名は削除したので、この時点で quiz リストに残っているのは正解と3つの選択肢です。

これら4つの順番を shuffle 関数を使ってシャッフルします。

シャッフルしてから解答ボタンにセットすることで、毎回違う順番で選択肢を表示できるようになります。

24行目

quizData.removeAt(0)

同じクイズが出題されないように quizData リストから問題を削除しておきます。

6. アプリを実行する

それではクイズがランダムに表示されるかエミュレーターで確認してみましょう!

ランダムに出題されるかを確認するために、一度アプリを終了して再度開いてみてください。

問題文が変わって、解答ボタンの順番もシャッフルされているでしょうか?

次に行うこと

次回はクイズアプリで一番重要な機能「正解・不正解の判定」を実装していきます。

ここまでのコード

Q
MainActivity.kt
package com.example.quizapp

import android.os.Bundle
import android.view.View
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.quizapp.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private var rightAnswer: String? = null
    private var rightAnswerCount = 0
    private var quizCount = 1

    private val quizData = mutableListOf(
        mutableListOf("北海道", "札幌市", "長崎市", "福島市", "前橋市"),
        mutableListOf("青森県", "青森市", "広島市", "甲府市", "岡山市"),
        mutableListOf("岩手県", "盛岡市", "大分市", "秋田市", "福岡市"),
        mutableListOf("宮城県", "仙台市", "水戸市", "岐阜市", "福井市"),
        mutableListOf("秋田県", "秋田市", "横浜市", "鳥取市", "仙台市"),
        mutableListOf("山形県", "山形市", "青森市", "山口市", "奈良市"),
        mutableListOf("福島県", "福島市", "盛岡市", "新宿区", "京都市"),
        mutableListOf("茨城県", "水戸市", "金沢市", "名古屋市", "奈良市"),
        mutableListOf("栃木県", "宇都宮市", "札幌市", "岡山市", "奈良市"),
        mutableListOf("群馬県", "前橋市", "福岡市", "松江市", "福井市")
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        binding.answerBtn1.setOnClickListener { checkAnswer(it) }
        binding.answerBtn2.setOnClickListener { checkAnswer(it) }
        binding.answerBtn3.setOnClickListener { checkAnswer(it) }
        binding.answerBtn4.setOnClickListener { checkAnswer(it) }

        quizData.shuffle()

        showNextQuiz()
    }

    // クイズを出題する
    private fun showNextQuiz() {
        // クイズを1問取り出す
        val quiz = quizData[0]

        // 問題をセット
        binding.questionLabel.text = quiz[0]

        // 正解をセット
        rightAnswer = quiz[1]

        // 都道府県名を削除
        quiz.removeAt(0)

        // 正解と選択肢3つをシャッフル
        quiz.shuffle()

        // 正解と選択肢をセット
        binding.answerBtn1.text = quiz[0]
        binding.answerBtn2.text = quiz[1]
        binding.answerBtn3.text = quiz[2]
        binding.answerBtn4.text = quiz[3]

        // 出題したクイズを削除する
        quizData.removeAt(0)
    }

    // 解答ボタンが押されたら呼ばれる
    private fun checkAnswer(view: View) {
    }

    // 出題数をチェックする
    private fun checkQuizCount() {
    }
}
Subscribe
Notify of
0 Comments
古い順
新しい順 人気順
Inline Feedbacks
View all comments
ABOUT ME
Sara
Sara
運営者
書籍やオンライン講座でプログラミングを勉強してフリーランスのプログラマーになりました。
このサイトでは「わかりやすく・シンプル」をモットーに、プログラミングの基礎からアプリ開発まで紹介します。
独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています。
主な使用言語:Java / Kotlin / PHP
>> 詳しいプロフィール
>> お問い合わせ
>> 書籍を出版しました!
本格的に学びたい方へ

Code for Fun プログラミング講座

POINT 01

動くコード

プログラミングの文法を学んでも、そこからどのようにアプリ開発ができるのかイメージが湧きにくいものです。

Code for Fun のプログラミング講座では、ゲームやカレンダーなどアプリとして機能するものを作りながらプログラミングを学ぶことができます。

POINT 02

自分のペースで

オンライン講座なので、ご自身のペースで学習を進めて頂けます。

受講期限もないので、いつでも前のレッスンに戻ることができるので安心です。

お申し込みしたその日からすぐに始めることができます。

POINT 03

個別サポート

プログラミング学習では、エラーが起きることはよくあります。そんな時はお気軽にお問い合わせください!

コメント欄またはメールによるサポートを回数無制限でご利用頂けます。(*講座に関連するご質問のみ対応)

今すぐ無料でお試し

0
この記事にコメントするx
記事URLをコピーしました