我是 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
抱歉所有的编辑,我无法让编辑包含代码并正确发布,所以我把它分成几块,一次添加一点。