Android Studio(Java)未接收顺序正确的按钮值

Android Studio(Java)未接收顺序正确的按钮值,java,android,button,onclicklistener,Java,Android,Button,Onclicklistener,我目前正在开发一个游戏,玩家应该通过选择3个按钮(其中1个是答案)和一个“下一步”按钮来解决X+Y问题(通过将组件的值替换为下一个问题的值)。但是,我无法统计答案,因为我的测试选择(按钮)总是测试下一个问题的值 给我一点背景, questionCategories是具有不同级别的ArrayList的ArrayList e、 get(selectedLevel)返回不同算术的数组列表 jumbleOptions使用选项中的正确和错误答案填充3个按钮 在回答问题1时,显示的选项值属于问题1,但测试

我目前正在开发一个游戏,玩家应该通过选择3个按钮(其中1个是答案)和一个“下一步”按钮来解决X+Y问题(通过将组件的值替换为下一个问题的值)。但是,我无法统计答案,因为我的测试选择(按钮)总是测试下一个问题的值

给我一点背景,
questionCategories是具有不同级别的ArrayList的ArrayList
e、 get(selectedLevel)返回不同算术的数组列表

jumbleOptions使用选项中的正确和错误答案填充3个按钮

在回答问题1时,显示的选项值属于问题1,但测试值(在测试中)来自问题2

e、 g.
Qn1:3+5-A:2,B:8,C:4
Qn2:8+2-A:10,B:11,C:12
当我在B上尝试Qn1并单击“下一步”转到下一个问题(并测试正确性)时,我的程序不是测试B:8,而是测试B:11。我试图记录每个按钮的捕获值和问题的答案,但它们都是正确的,我不确定哪里出了问题

代码段位于onViewCreated中,由于原始元素中的占位符文本,第一个问题被初始化为显示。很抱歉,如果代码片段没有太多意义,请尽量保持简短,以便(希望)更具可读性

// Initialize first question to display
questionNumber.setText("Question " + String.valueOf(qnNumDisplay));
questionTitle.setText(((questionCategories.get(selectedLevel)).get(0)).toString());
jumbleOptions(((questionCategories.get(selectedLevel)).get(0)));

do {
    nextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Question q = (questionCategories.get(selectedLevel)).get(numQnAnswered);
            // Increment question number related variable
            numQnAnswered++;
            // Replace displayable elements with next question
            //Question Number
            questionNumber.setText("Question " + String.valueOf(numQnAnswered));

            questionTitle.setText(q.toString());
            jumbleOptions(((questionCategories.get(selectedLevel)).get(numQnAnswered)));

            boolean test = checkAnswer(String.valueOf(q.getAnswer()),
                options.get(SELECTED_OPTION).getText().toString());
            Log.d("Answer Correctness", String.valueOf(test));
        }
    });
    counter++;
} while (counter < NUMBER_OF_QNS);
//初始化要显示的第一个问题
questionNumber.setText(“问题”+字符串.valueOf(qnNumDisplay));
questionTitle.setText(((questionCategories.get(selectedLevel)).get(0)).toString();
巨型选项(((questionCategories.get(selectedLevel)).get(0));
做{
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
最后一个问题q=(questionCategories.get(selectedLevel)).get(numQnAnswered);
//增量问题编号相关变量
numQnAnswered++;
//用下一个问题替换可显示的元素
//问题编号
questionNumber.setText(“问题”+字符串.valueOf(numQnAnswered));
questionTitle.setText(q.toString());
巨型选项(((questionCategories.get(selectedLevel)).get(numQnAnswered));
布尔测试=检查答案(String.valueOf(q.getAnswer()),
options.get(SELECTED_OPTION.getText().toString());
Log.d(“应答正确性”,String.valueOf(test));
}
});
计数器++;
}while(计数器<数量);

让我们模拟一下场景: 第一个问题手动设置,下一个问题基于按钮单击加载。我假设
numqnansweed
0
,您从
numqnansweed
第th个位置的
问题
对象中得到答案,对吗

final Question q = (questionCategories.get(selectedLevel)).get(numQnAnswered);
正如你的代码所说。 请注意这里:

// Increment question number related variable
numQnAnswered++;
然而现在的问题是,答案是在点击按钮时验证的,我想你已经忘记了第一个问题是手动设置的在检查答案之前,您已经增加了
numQnAnswered
变量,因此您的问题比答案落后一步。希望它有意义

验证当前问题后,只需减少
numqnansweed
变量

// Initialize first question to display
questionNumber.setText("Question " + String.valueOf(qnNumDisplay));
questionTitle.setText(((questionCategories.get(selectedLevel)).get(0)).toString());
jumbleOptions(((questionCategories.get(selectedLevel)).get(0)));

do {
    nextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Question q = (questionCategories.get(selectedLevel)).get(numQnAnswered);
            // first we need to check answer of previous question 
            boolean test = checkAnswer(String.valueOf(q.getAnswer()),
                options.get(SELECTED_OPTION).getText().toString());
            Log.d("Answer Correctness", String.valueOf(test));

            // Increment question number related variable
            numQnAnswered++;
            // Replace displayable elements with next question
            //Question Number
            questionNumber.setText("Question " + String.valueOf(numQnAnswered));

            questionTitle.setText(q.toString());
            jumbleOptions(((questionCategories.get(selectedLevel)).get(numQnAnswered)));


        }
    });
    counter++;
} while (counter < NUMBER_OF_QNS);
//初始化要显示的第一个问题
questionNumber.setText(“问题”+字符串.valueOf(qnNumDisplay));
questionTitle.setText(((questionCategories.get(selectedLevel)).get(0)).toString();
巨型选项(((questionCategories.get(selectedLevel)).get(0));
做{
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
最后一个问题q=(questionCategories.get(selectedLevel)).get(numQnAnswered);
//首先我们需要检查上一个问题的答案
布尔测试=检查答案(String.valueOf(q.getAnswer()),
options.get(SELECTED_OPTION.getText().toString());
Log.d(“应答正确性”,String.valueOf(test));
//增量问题编号相关变量
numQnAnswered++;
//用下一个问题替换可显示的元素
//问题编号
questionNumber.setText(“问题”+字符串.valueOf(numQnAnswered));
questionTitle.setText(q.toString());
巨型选项(((questionCategories.get(selectedLevel)).get(numQnAnswered));
}
});
计数器++;
}while(计数器<数量);

numQnAnswered最初有哪个值?我只能看到,如果按下按钮,你会增加它clicked@0X0nosugarnumQnAnswered的初始值为0。缺少很多代码,所以我主要是猜测。但是,看起来您将一个问题的预期答案与当前选项(如果您通过调用jumbleOptions([…使用递增的numQnAnswered])进行比较