我有一个非常简单的方法,如果点击次数等于4,8,12则输出相关消息,否则每4个数字输出一般消息。这都显示在一个对话框中,但我注意到,每次增加点击次数时会出现else语句。我不确定为什么会这样?
我还没有得到的是每次出现对话框时,需要更多的尝试来解雇它。例如,当它第一次打开时,我单击确定按钮一次然后关闭。当它第二次打开时,需要点击2次才能关闭它。 £倍等于3倍等等。
selectAnotherButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getClickCountInt++;
if (getClickCountInt == 4){
ShowRewardDialog("You are rewarded with a the yellow smiley face in the homepage");
} else if (getClickCountInt == 8) {
ShowRewardDialog("You are rewarded with a the green smiley face in the homepage");
} else if (getClickCountInt == 12) {
ShowRewardDialog("You are rewarded with a the red smiley face in the homepage");
} else {
for(int i = 0; i <= getClickCountInt; i+=4) {
ShowRewardDialog("You are rewarded with a video\"");
}
}
}
});
private void ShowRewardDialog(String message) {
final Dialog dialog = new Dialog(Content.this);
dialog.setContentView(R.layout.custom_dialog);
SpannableString title = new SpannableString("YOU GAINED A REWARD");
title.setSpan(new ForegroundColorSpan(Content.this.getResources().getColor(R.color.purple))
, 0, title.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// set the custom dialog components - text, image and button
TextView text = dialog.findViewById(R.id.dialog_text);
dialog.setTitle(title);
text.setText(message);
Button dialogButton = dialog.findViewById(R.id.dialog_button_OK);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
}
答案 0 :(得分:1)
发生这种情况的原因是你在同一个地方打开多个窗口,这是由这个循环引起的:
for(int i = 0; i <= getClickCountInt; i+=4) {
ShowRewardDialog("You are rewarded with a video\"");
}
假设getClickCountInt为10.
所以,你现在有3个奖励对话框,完全重叠。当您按下关闭按钮一次时,它会关闭第一个 - 但它后面还有2个。即使你关闭一个,看起来什么也没发生。
解决这个问题的最简单方法是摆脱for循环。相反,使用mod操作来确定getClickCountInt是否为4的倍数。
mod符号执行除法,并返回余数。
例如,假设你有10除以4。你可以适应4到10两次,剩下2个。如果余数为0,则数字是另一个的倍数。
例如,四次进入12次3次,没有留下任何东西。所以,12是四的倍数!
执行此操作的代码比听起来容易。只需用这个替换for循环!
if(getClickCountInt % 4 == 0){
ShowRewardDialog("You are rewarded with a video\"");
}