0

私は 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

すべての編集で申し訳ありませんが、編集にコードを含めて正しく投稿することができなかったので、チャンクに分割して少しずつ追加しました.

4

1 に答える 1

0

あなたの言うことから、私はユーザーに質問に答えさせる2つの方法を考えます:

  1. 新しいループをトリガーする入力EditTextにonclickリスナーがあります。
  2. ループの開始時に開始されるダイアログアクティビティがあり、ユーザーに新しい回答の入力を求めます。ゲームアクティビティは、onActivityResultを介して回答を受け取ります。
于 2012-06-01T03:46:54.447 に答える