2 回答
TA贡献1802条经验 获得超5个赞
创建一个通用侦听器,您可以将其添加到所有按钮,并在该侦听器内处理根据需要确定正确的逻辑。例如:
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);
}
}
}
}
TA贡献1798条经验 获得超3个赞
我将为所有按钮设置相同的clickListener,然后将逻辑移到那里。只需检查数组中按钮的索引是否与正确答案的索引相同,而无需更新clickListener或设置不同。
添加回答
举报