質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.00%

android studioでのクイズアプリ開発に関して

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 691

sarobetsu

score 7

android studioを使ってkotlinでクイズアプリの作成を目指しています。
さまざまなサイトを参考にコードを書いたのですが、思ったような動作をしません。
問題を10問出題し、4つの回答ボタンのうちどれかを押すと正解か不正解かを判定してダイアログが表示され、ダイアログ中にある「OK」ボタンを押すと次の問題が表示されるようにしています。

hokkaidoquiz.kt

class hokkaidoquiz : AppCompatActivity() {
      private var rightAnswerCount: Int = 0
      private var rightAnswer: String? = null
      private var quizCount = 1
    private val QUIZ_COUNT = 10
    var quizArray = ArrayList<ArrayList<String>>()


    var quizData = arrayOf(
        // {"問題文", "正解", "選択肢1", "選択肢2", "選択肢3"}
         )


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_hokkaidoquiz)


              for (i in 0 until quizData.size) {

            val tmpArray = ArrayList<String>()
            tmpArray.add(quizData[i][0])  // 問題文
            tmpArray.add(quizData[i][1])  // 正解
            tmpArray.add(quizData[i][2])  // 選択肢1
            tmpArray.add(quizData[i][3])  // 選択肢2
            tmpArray.add(quizData[i][4])  // 選択肢3
            // tmpArrayをquizArrayに追加する
            quizArray.add(tmpArray)
        }

    }



     fun showNextQuiz() {

       textView4.setText("Q$quizCount")
        val random = Random()
        val randomNum = random.nextInt(quizArray.size)

        val quiz = quizArray[randomNum]

       textView5.text = (quiz[0])
        rightAnswer = (quiz[1])
        quiz.removeAt(0)

        Collections.shuffle(quiz)

        // 回答ボタンに正解と選択肢3つを表示
       firstbutton.text =(quiz[0])
        secondbutton.text = (quiz[1])
       thirdbutton.text = (quiz[2])
       fourthbutton.text =(quiz[3])
        // このクイズをquizArrayから削除

        quizArray.removeAt(randomNum)
    }
    fun checkAnswer(view: View) {
        // どの回答ボタンが押されたか
        val answerBtn = findViewById<Button>(view.id)
        val btnText = answerBtn.text.toString()

        val alertTitle: String


        if (btnText == rightAnswer) {
            alertTitle = "正解!"
            rightAnswerCount++

        } else {
            alertTitle = "不正解..."
        }

        // ダイアログを作成

        val builder = AlertDialog.Builder(this)

        builder.setTitle(alertTitle)
        builder.setMessage("答え : $rightAnswer")

        builder.setPositiveButton("OK") { dialogInterface, i ->
            if (quizCount === QUIZ_COUNT) {
                // 結果画面へ移動
                val intent = Intent(applicationContext, result::class.java)
                intent.putExtra("RIGHT_ANSWER_COUNT", rightAnswerCount)
                startActivity(intent)
            } else {
                quizCount++
                showNextQuiz()
            }
        }
        builder.setCancelable(false)
        builder.show()
    }
}

     
このようなコード(クイズ内容は省略)なのですが、クイズ画面を表示した際、最初の画面(第1問)で回答ボタン、およびtextViewに書かれている文字列に「quizdata」であらかじめ書いた内容が
参照されず、hokkaidoquiz.xmlの「text」で入力した内容がそのまま表示されてしまいます。
なお第2問以降は問題なく表示されています。
初心者なのでとても初歩的な部分を見落としているかもしれませんが、アドバイスよろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

onCreate の最後に showNextQuiz() が必要な気が致します.

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/24 17:13

    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_hokkaidoquiz)

    for (i in 0 until quizData.size) {

    // 新しいArrayListを準備
    val tmpArray = ArrayList<String>()
    // クイズデータを追加
    tmpArray.add(quizData[i][0]) // 問題文
    tmpArray.add(quizData[i][1]) // 正解
    tmpArray.add(quizData[i][2]) // 選択肢1
    tmpArray.add(quizData[i][3]) // 選択肢2
    tmpArray.add(quizData[i][4]) // 選択肢3
    // tmpArrayをquizArrayに追加する
    quizArray.add(tmpArray)
    }
    showNextQuiz()

    }


    と入力したところ無事作動しました。
    ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.00%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる