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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

994閲覧

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

sarobetsu

総合スコア13

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2019/02/24 05:25

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

kotlin

1 2hokkaidoquiz.kt 3 4class hokkaidoquiz : AppCompatActivity() { 5 private var rightAnswerCount: Int = 0 6 private var rightAnswer: String? = null 7 private var quizCount = 1 8 private val QUIZ_COUNT = 10 9 var quizArray = ArrayList<ArrayList<String>>() 10 11 12 var quizData = arrayOf( 13 // {"問題文", "正解", "選択肢1", "選択肢2", "選択肢3"} 14 ) 15 16 17 override fun onCreate(savedInstanceState: Bundle?) { 18 super.onCreate(savedInstanceState) 19 setContentView(R.layout.activity_hokkaidoquiz) 20 21 22 for (i in 0 until quizData.size) { 23 24 val tmpArray = ArrayList<String>() 25 tmpArray.add(quizData[i][0]) // 問題文 26 tmpArray.add(quizData[i][1]) // 正解 27 tmpArray.add(quizData[i][2]) // 選択肢1 28 tmpArray.add(quizData[i][3]) // 選択肢2 29 tmpArray.add(quizData[i][4]) // 選択肢3 30 // tmpArrayをquizArrayに追加する 31 quizArray.add(tmpArray) 32 } 33 34 } 35 36 37 38 fun showNextQuiz() { 39 40 textView4.setText("Q$quizCount") 41 val random = Random() 42 val randomNum = random.nextInt(quizArray.size) 43 44 val quiz = quizArray[randomNum] 45 46 textView5.text = (quiz[0]) 47 rightAnswer = (quiz[1]) 48 quiz.removeAt(0) 49 50 Collections.shuffle(quiz) 51 52 // 回答ボタンに正解と選択肢3つを表示 53 firstbutton.text =(quiz[0]) 54 secondbutton.text = (quiz[1]) 55 thirdbutton.text = (quiz[2]) 56 fourthbutton.text =(quiz[3]) 57 // このクイズをquizArrayから削除 58 59 quizArray.removeAt(randomNum) 60 } 61 fun checkAnswer(view: View) { 62 // どの回答ボタンが押されたか 63 val answerBtn = findViewById<Button>(view.id) 64 val btnText = answerBtn.text.toString() 65 66 val alertTitle: String 67 68 69 if (btnText == rightAnswer) { 70 alertTitle = "正解!" 71 rightAnswerCount++ 72 73 } else { 74 alertTitle = "不正解..." 75 } 76 77 // ダイアログを作成 78 79 val builder = AlertDialog.Builder(this) 80 81 builder.setTitle(alertTitle) 82 builder.setMessage("答え : $rightAnswer") 83 84 builder.setPositiveButton("OK") { dialogInterface, i -> 85 if (quizCount === QUIZ_COUNT) { 86 // 結果画面へ移動 87 val intent = Intent(applicationContext, result::class.java) 88 intent.putExtra("RIGHT_ANSWER_COUNT", rightAnswerCount) 89 startActivity(intent) 90 } else { 91 quizCount++ 92 showNextQuiz() 93 } 94 } 95 builder.setCancelable(false) 96 builder.show() 97 } 98}

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

投稿2019/02/24 07:55

編集2019/02/24 08:28
jimbe

総合スコア12543

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sarobetsu

2019/02/24 08: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() } と入力したところ無事作動しました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問