Warning: Undefined array key "is_rate_editable" in /home/xs576504/codeforfun.jp/public_html/wp-content/plugins/wpdiscuz/class.WpdiscuzCore.php on line 1303
4択クイズアプリ

【Android Studio】クイズアプリ開発講座 第4回「問題と選択肢を表示する」

Sara

Android Studio Iguana | 2023.2.1 での動作確認を完了しました。(2024年4月)

ここまでの記事はこちら 

前回はクイズを管理する配列を作成しました。

今回はその配列からクイズを取り出して画面に表示してみましょう。

解説

1. クイズ出題用のメソッド

5~36行目を追加してください。

必要な import

2つの import 文が追加されます。

import java.util.Collections;
import java.util.Random;

Random が自動的に追加されない場合は、青いメッセージが出ている状態で AltEnter を同時に押します(Mac の場合は OptionEnter)。

Random (java.util) を選択してください。

7行目:Warning の解消

countLabel.setText("Q" + quizCount);

文字列の上にカーソルを合わせると Do not concatenate text displayed with setText. Use resource string with placeholders. と表示されます。

これは「文字列を連結しないで、string リソースでプレースホルダーを使ってください」という Warning です。

string リソースとは strings.xml ファイルのことで、プレースホルダーは strings.xml に定義した「Q%d」の %d のことです。

クイズ画面を作成した時に strings.xml に書いた

<string name="count_label">Q%d</string>

%d の部分に、問題番号を入れて表示してみましょう。

countLabel.setText(“Q” + quizCount); を以下のように書き換えてください。

countLabel.setText(getString(R.string.count_label, quizCount));

getString メソッドを使って strings.xml に定義した文字列を R.string.名前 と書いて取り出します。第二引数には %d の部分に入れる数値を指定します。

Warning が消えましたね。

10・11行目:ランダムな数字

quizArrayからランダムにクイズを取り出すために、ランダムな数字を生成します。

nextInt() メソッドを使うと「0から指定した値未満の整数」を返してくれます。

例えば

random.nextInt(5)

0から5未満の整数、つまり0・1・2・3・4のどれかを返します。

このアプリでは quizArray からランダムにクイズを取り出したいので、0から配列の要素数マイナス1の範囲でランダムな数字を生成しています。

ArrayList<String> quiz の中身

ArrayList<String> quiz には、この順番で要素が入っています。

{"都道府県名", "正解", "選択肢1", "選択肢2", "選択肢3"}

questionLabel には都道府県名を表示するので quiz.get(0) で quiz 配列から取り出します。

questionLabel.setText(quiz.get(0));

rightAnswer には正解を入れておくので quiz.get(1) で quiz 配列から取り出します。

rightAnswer = quiz.get(1);

26行目:選択肢のシャッフル

Collections.shuffle(quiz);

都道府県名は23行目で削除しているので、この時点で quiz 配列に残っているのは「正解と3つの選択肢」です。

これら4つの順番を Collections クラスの shuffle メソッドを使ってシャッフルします。

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

35行目:クイズを削除

quizArray.remove(randomNum);

同じ問題が出題されないように、quizArray から忘れずに削除しておきましょう。

2. showNextQuiz を呼び出す

アプリを起動して MainActivity が呼び出されたときにクイズが出題されるように showNextQuiz メソッドを呼び出します。

onCreate メソッドに4行目を追加します。

3. エミュレーターで確認する

ここまでのコードが上手く動くかエミュレーターで確認してみましょう!

クイズが表示されましたか?

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

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

上手く表示されない場合は、最後にサンプルコードを貼ってあるので比較してみてください。

次に行うこと

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

ここまでのコード

Q
MainActivity.java

Subscribe
Notify of
guest
10 Comments
古い順
新しい順 人気順
Inline Feedbacks
View all comments
takuya
takuya
2 years ago

初めての質問失礼致します。
最近から勉強を始め、分かりやすく、楽しく勉強させて頂いております。
クイズアプリ開発のエラーについて2つ質問があります。
「//randomNumを使ってquizArrayからクイズをひとつ取り出す」の部分のコードの部分にエラーが出てしまいます。互換性のない型です、と出ます。どうしたら宜しいでしょうか。
また、「//正解をrightAnswerにセット」のコードでもエラーが出てしまいました。java.util.ArrayListのset(int.java.lang.String)は(int)に適用できません、と出ます。

以上となります。
初歩的な点かと思い恐縮ですが、ご教示頂けると嬉しいです。
宜しくお願い致します。

takuya
takuya
2 years ago

先ほどの質問した者です。
情報が抜けており失礼しました。
開発環境はwindows10、アンドロイドスタジオ(2021.11.15インストール)になります。
宜しくお願い致します。

石井徹
石井徹
2 years ago

Sara様
お世話になります。
第4回まで、なんとか出来たので実行したのですが、
4つのエラーが表示されてうまくいきませんでした。
onClick method does not exist
ボタン1~4についてこのようなエラーが生じました。
どのあたりにミスがあったのかご教示いただけませんか。
よろしくお願いいたします。

石井徹
石井徹
2 years ago

開発環境が記入漏れでしたすみません。
環境はwin10proで最新のandroid studio javaで行っています。
石井

fkd2015
fkd2015
1 year ago

初めての質問失礼致します。
Splitの右画面がエミュレータ画面だと思うのですが、表示される問題番号が%dのままだったりjavaファイルでアレンジした配列が問題文や選択肢にちっとも反映されないのですが、何かおかしいのでしょうか?
開発環境はAndroid Studio Flamingoです(2023年4月21日ダウンロード)

fkd2015
fkd2015
1 year ago
Reply to  Sara

先ほど質問したものです。
「エミュレータをAndroid Studioとは別ウィンドウで開く方法」を試してみたのですが、ただ「Launch in a tool window」の項目のチェックを外しただけなのに自分の作ったアプリが正しく動くようになりました。アドバイスありがとうございました!

Last edited 1 year ago by fkd2015
ABOUT ME
Sara
Sara
運営者
書籍やオンライン講座でプログラミングを勉強してフリーランスのプログラマーになりました。
このサイトでは「わかりやすく・シンプル」をモットーに、プログラミングの基礎からアプリ開発まで紹介します。
独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています。
主な使用言語:Java / Kotlin / PHP
>> 詳しいプロフィール
>> お問い合わせ
>> 書籍を出版しました!
本格的に学びたい方へ

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

Code for Fun プログラミング講座では、プログラミングの基礎からアプリ開発まで学ぶことができます。

わかりやすく・シンプルをモットーに

  • 同じコードを書けば必ず完成できること
  • 専門用語を使いすぎないこと

を重視しています。

POINT 01

動くコード

プログラミングの文法だけを学んでも、そこから動くアプリを開発をするのは難しいです。

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

POINT 02

自分のペースで

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

分からないことがあっても、前のレッスンに戻ることができるので安心です。

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

POINT 03

個別サポート

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

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

今すぐ無料でお試し

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