显示基于if / else语句的对话框

时间:2018-06-15 15:47:26

标签: java android

我有一个非常简单的方法,如果点击次数等于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();
    }
}

1 个答案:

答案 0 :(得分:1)

发生这种情况的原因是你在同一个地方打开多个窗口,这是由这个循环引起的:

for(int i = 0; i <= getClickCountInt; i+=4) {
    ShowRewardDialog("You are rewarded with a video\"");
}

假设getClickCountInt为10.

  • 我从0开始.0小于或等于10.它显示奖励对话框。
  • i变为4. 4小于或等于10.它显示奖励对话框。
  • i变为8. 8小于或等于10.它显示奖励对话框。
  • 我变成12. 12大于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\"");
}