私は Android アプリケーション開発に不慣れで、ユーザー入力を取り込む一連の画面を進める方法を見つけようとしています。ユーザーが基本的な 2 つの整数の加算問題に答える小さな数学ゲームを作成しています。ここまでで、メイン メニューが作成されました。GameActivity を起動する [新しいゲーム] ボタンがあり、1 つの数学の問題で問題なく動作します。ただし、ユーザーが簡単な数学の問題に答えを入力した後、ユーザーが現在の問題に答え、メソッドが正しい/間違った値を返すと、別の数学の問題に進むことができるようにしたいと考えています。最初は、 GameActivity 内から基本的な FOR ループのようなことをすることを考えていました。
for(int i = 0; i < 10; i++){ gameMethod(); }
gameMethod() は、単純に 2 つの乱数を生成し、それらを追加して正しい答えを取得し、EditText フィールドを使用してユーザーに推測を入力するよう求める Java メソッドです。XML レイアウト ファイルで作成された TextView ボックスを使用して、乱数と回答を表示します。
gameMethod への各呼び出しは、少なくとも私が思うに、ランダム化された数値を繰り返しごとに画面に表示される TextView フィールドに再入力するだけです。以前の数字が何だったのかは本当に気にしないので、上書きすることにしました。ただし、それを行うためのコードを取得できません。Log.d() ステートメントを 1 つまたは 2 つ挿入したところ、FOR ループが実際には 10 回正しく実行されていましたが、次の gameMethod() を起動する前にユーザー入力を待機していませんでした。
いろいろ調べてみると、startActivityForResult() が見つかり、これがより適切なアプローチ方法ではないかと考えました。このようにして、3 つのアクティビティがあると予想しています。メイン メニューは GameActivity を呼び出します。これは、たとえば 10 回反復し、各反復ではさらに別のアクティビティ GameScreenActivity を呼び出します。このアクティビティは、実際に画面に数字を表示し、ユーザー入力を読み取り、正解の場合は 1 を返し、不正解の場合は 0 を返します。これまでのところ StarActivityForResult() を読んでいると、私はそのプロセスにやや混乱しており、これが探索するのにもっともらしい道なのかどうか疑問に思っていました.
繰り返しますが、私はこの Android プログラミングに非常に慣れていないため、得られるあらゆる支援に感謝しています。
ありがとうございました。
最初に gameMethod() を含めなかったことをお詫びします。以下に追加しました。
// Create and initialize arrays of integers
int[] a = {0,1,2,3,4,5,6,7,8,9,10};
int[] b = {0,1,2,3,4,5,6,7,8,9,10};
// Creates random number generator
Random randy = new Random();
// Generates two random values to add
int r1 = randy.nextInt(10);
int r2 = randy.nextInt(10);
// Calculates correct answer
int an = a[r1] + a[r2];
// Displays 1st number
TextView number1 = (TextView) findViewById(R.id.firstNumber);
number1.setText(Integer.toString(a[r1]));
// Displays 2nd number
TextView number2 = (TextView) findViewById(R.id.secondNumber);
number2.setText(Integer.toString(b[r2]));
// Displays correct answer
TextView answer1 = (TextView) findViewById(R.id.answerNumber);
//hide answer until user puts in theirs
answer1.setVisibility(View.INVISIBLE);
answer1.setText(Integer.toString(an));
//hide the answer place holder value
TextView uAnswerDisplay = (TextView) findViewById(R.id.userAnswerNumber);
uAnswerDisplay.setVisibility(View.INVISIBLE);
//Get the EditText field that the user will input their answer to
EditText inputText = (EditText) findViewById(R.id.userInput);
//set up a listener to run once the ENTER key is hit after their answer has been entered
inputText.setOnKeyListener(new EditText.OnKeyListener(){
public boolean onKey(View v, int keyCode, KeyEvent event){
//only go on the ENTER key when pressed DOWN
if((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)){
EditText innerInputText = (EditText) findViewById(R.id.userInput); //get the EditText box reference
TextView innerUAnswerDisplay = (TextView) findViewById(R.id.userAnswerNumber); //get the TextView box that the answer will go in
String inputString = innerInputText.getText().toString(); //capture the user's input
int uAnswer = Integer.parseInt(inputString); //parse user answer to an integer
int cAnswer = Integer.parseInt((((TextView) findViewById(R.id.answerNumber)).getText()).toString());
innerUAnswerDisplay.setText(Integer.toString(uAnswer)); //display the string after converting from integer
//change colors of text based on correctness
if (uAnswer == cAnswer){ innerUAnswerDisplay.setTextColor(Color.GREEN); } //green for correct
else { innerUAnswerDisplay.setTextColor(Color.RED); } //red for incorrect
innerUAnswerDisplay.setVisibility(View.VISIBLE); //make the user input answer visible
TextView innerAnswer1 = (TextView) findViewById(R.id.answerNumber);
innerAnswer1.setVisibility(View.VISIBLE); //hide answer until user puts in theirs
} //end of if
return false; //return false
} //end of onKey
}); //end of setOnKeyListener
すべての編集で申し訳ありませんが、編集にコードを含めて正しく投稿することができなかったので、チャンクに分割して少しずつ追加しました.