所以我有一个Button数组,其中一个是正确的答案,而另外三个是不正确的。但是,对于每个问题,正确的按钮都会更改。我将如何更新我的点击监听器?似乎很简单的问题,也许我在这里看不到明确的答案...
到目前为止,这是我的代码,谢谢:
1
答案 0 :(得分:3)
制作一个通用侦听器,您可以将其添加到所有按钮,并在该侦听器中处理确定所需的正确按钮的逻辑。例如:
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);
}
}
}
}
答案 1 :(得分:0)
我将为所有按钮设置相同的clickListener,然后将逻辑移到那里。只需检查数组中按钮的索引是否与正确答案的索引相同,而无需更新clickListener或设置不同。
答案 2 :(得分:0)
动态实现此目标的另一种方法是,如果您不想创建自定义Listener
,则使用Tag
方法来跟踪正确的按钮,如下所示:
answerButtons[newQuestion(questionTextView,answerButtons)].setTag("CORRECT");
for(Button button : answerButtons){
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v.getTag()!=null && v.toString().equals("CORRECT")){
correctDialog(questionTextView,answerButtons);
}else{
wrongDialog(questionTextView, answerButtons);
}
}
});
}