所以我有一个按钮数组,其中一个是正确的答案,而其他三个是错误的。然而,在每个问题上,正确的按钮都会发生变化。我该如何更新我的点击监听器呢?这似乎是一个足够简单的问题,也许我只是在这里看不到明确的答案…
以下是我到目前为止的代码,提前感谢:
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);
}
});
}
}
发布于 2018-06-23 03:35:06
创建一个可以添加到所有按钮的通用侦听器,并在该侦听器中处理用于根据需要确定哪个按钮正确的逻辑。例如:
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
)。
一种方法是使监听器成为活动中的内部类。所以你有一些东西(未测试,试一试)如下:
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);
}
}
}
}
发布于 2018-06-23 03:35:57
我会为所有按钮设置相同的clickListener,并将逻辑移动到那里。只需检查按钮在数组中的索引是否与正确答案的索引相同,无需更新clickListeners或设置不同。
https://stackoverflow.com/questions/50994464
复制相似问题