所以我有一组按钮,其中一个是正确答案,而其他 3 个是错误的。然而,在每个问题上,正确的按钮都会改变。我将如何去更新我的点击监听器?这似乎是一个足够简单的问题,也许我在这里看不到明确的答案......
到目前为止,这是我的代码,在此先感谢:
int correctIndex=newQuestion(questionTextView,answerButtons);//CREATES A NEW QUESTION and returns the correct index (0-3);
answerButtons[correctIndex].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
correctDialog(questionTextView,answerButtons);
}
});
for (int i = 0; i < 4; i++) {
final int j = i;
if (j != correctIndex) {
answerButtons[j].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
wrongDialog(questionTextView, answerButtons);
}
});
}
}
请您参考如下方法:
制作一个通用监听器,您可以将其添加到所有按钮,并在该监听器中处理用于根据需要确定哪个按钮正确的逻辑。例如:
class YourListener implements View.OnClickListener {
private int correctButtonId;
public YourListener(int correctButtonId) {
this.correctButtonId = correctButtonId;
}
@Override
public void onClick(View v) {
if (v.getId() == correctButtonId) {
// do stuff
} else {
// do other stuff
}
}
}
然后您可以将所有 n
按钮设置为拥有此监听器,并且您可以根据需要从监听器外部设置正确按钮的 ID。
比如
// this is the id of the button that is correct, where x represents its index, which you know ahead of time
int id = answerButtons[x].getId();
for (int i = 0; i < 4; i++) {
answerButtons[i].setOnClickListener(new YourListener(id));
}
编辑以回答:如何从监听器内部调用方法(在您的情况下,例如 correctDialog
)。
一种方法是让监听器成为您 Activity 中的内部类。所以你有一些东西(没有测试,试一试),比如:
public class MainActivity extends AppCompatActivity {
private class YourListener implements View.OnClickListener {
private TextView textView;
private Button[] buttons;
private int correctButtonId;
public YourListener(TextView textView, Button[] buttons, int correctButtonId) {
this.textView = textView;
this.buttons = buttons;
this.correctButtonId = correctButtonId;
}
@Override
public void onClick(View v) {
if (v.getId() == correctButtonId) {
MainActivity.this.correctDialog(textView, buttons);
} else {
MainActivity.this.wrongDialog(textView, buttons);
}
}
}
}