按下button2('dontKnowAnswer')后我想禁止button1('knowAnswerButton')做任何动作,直到setCurrentCard();从内部runOnUiThread被称为我已经做了全局布尔状态,它完成了这项工作,但看起来这个问题真的很丑陋的解决方案是否有任何模式如何做到这一点?
knowAnswerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (currentPosition > mTestDeck.size()){
//TO DO
// END
}
if (state == true) {
mTestDeck.correctAnswer();
currentPosition++;
setCurrentCard();
}
}
});
dontKnowAnswerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(currentPosition > mTestDeck.size()){
//TO DO
// END
}
myTextView.setText(currentCard.getBack());
currentPosition++;
state = false;
new Timer().schedule(new TimerTask() {
@Override
public void run() {
FlashCardActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
setCurrentCard();
state = true;
}
});
}
}, PAUSE_TIMER);
}
});
}
答案 0 :(得分:0)
是的,您可以使用模式单一入口点。创建自己的实现OnClickListener的StateClickListener。在此单击侦听器中创建静态标志,并在自定义侦听器类中对其进行管理。
答案 1 :(得分:0)
只需启用/禁用 knowAnswerButton 视图,这样您就不需要保留一个标志来保存状态。为此,只需使用button.setEnabled(boolean)
方法。
请注意,虽然未启用按钮(setEnabled(false)),但用户无法单击该按钮,因此不会触发click事件。
dontKnowAnswerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(currentPosition > mTestDeck.size()){
//TO DO
// END
}
myTextView.setText(currentCard.getBack());
currentPosition++;
knowAnswerButton.setEnabled(false);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
FlashCardActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
setCurrentCard();
knowAnswerButton.setEnabled(true);
}
});
}
}, PAUSE_TIMER);
}
});
knowAnswerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (currentPosition > mTestDeck.size()){
//TO DO
// END
}
mTestDeck.correctAnswer();
currentPosition++;
setCurrentCard();
}
});