0

我是 Android 应用程序开发的新手,正在尝试找到一种方法来处理一系列接受用户输入的屏幕。我正在制作一个小型数学游戏,用户将在其中回答基本的两个整数加法问题。至此主菜单创建完成。它有一个新游戏按钮,可以启动我的 GameActivity,它对于一个数学问题运行得很好。但是,在用户输入他们对简单数学问题的答案后,一旦用户回答了当前问题并且该方法将返回正确/不正确的值,我希望能够继续处理另一个数学问题。最初我想在 GameActivity 中做一个基本的 FOR 循环:

  for(int i = 0; i < 10; i++){ gameMethod(); }

gameMethod() 是一种 JAVA 方法,它简单地生成 2 个随机数,将它们相加以获得正确答案,然后使用 EditText 字段提示用户输入他们的猜测。它使用在 XML 布局文件中创建的 TextView 框显示随机数和答案。

至少我认为,每次调用 gameMethod 都会将随机数字重新输入到每次迭代时屏幕上显示的 TextView 字段中。我真的不在乎以前的数字是什么,所以我想我会覆盖它们。不过,我无法获得执行此操作的代码。我输入一两个 Log.d() 语句,发现 FOR 循环实际上正确运行了 10 次,但它在触发下一个 gameMethod() 之前没有等待用户输入。

在环顾四周时,我发现了 startActivityForResult() 并想知道这是否是一种更合适的方法。因此,通过这种方式,我预见到有三个活动,主菜单调用 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

根据您的说法,我会考虑两种让用户回答问题的方法:

  1. 在触发新循环的输入 EditText 上有一个 onclick 侦听器;
  2. 有一个在循环开始时开始的对话活动,提示用户输入新答案,您的游戏活动将通过其 onActivityResult 接收答案。
于 2012-06-01T03:46:54.447 回答