如何在最后一个元素处停止列表?

时间:2015-02-05 10:29:27

标签: java android list

我想尝试做一个简单的真/假游戏。

问题是我可以在我的列表中说出3个元素(或者我的情况下的问题)。出现第一个问题并且您选择是真还是假,然后出现一个带有答案的PopUp窗口,如果您的猜测正确,则按下确定并出现一个新问题。如果不是应用程序关闭(暂时)。如果您正确猜测所有问题,请到达最后一个问题并回答它,然后您将回到第一个问题。但是,如果再次回答它,则会出现IndexOutOfBoundsException: Invalid index 3, size is 3错误。所以我的问题是。如何让应用程序停在最后一个问题上,当我回答最后一个问题时,它会弹出一个带有congradulations公告的窗口,而不是第一个问题。

以下是按钮True的已编辑代码:

mYes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                initiatePopupWindow();
               //Show the first answer on first button click.
                ((TextView)pwindo.getContentView().findViewById(R.id.popupTekstas)).setText(questions.get((count[0]) % questions.size()).answer);
        // When PopUp button closes open the next question with the if/else conditions.
            btnClosePopup.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //if the question is true show next question/ else close app
                    if (type.get(count[0])) {

                        if(questions.size()-1 == count[0]) // if you count[0] is init to 0
                            //player has won
                            count[0] = 0;
                        else if(questions.size()-1 < count[0])
                            try {
                                throw new Exception("what?");
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        else
                        count[0]++;

                        mQuestion.setText(questions.get(count[0]).question); // you dont need calculate the module anymore
                        pwindo.dismiss();
                    } else {
                        finish();
                    }

                }
            });

            }
        });

这是假按钮:

  mNo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            initiatePopupWindow();

            ((TextView)pwindo.getContentView().findViewById(R.id.popupTekstas)).setText(questions.get((count[0]) % questions.size()).answer);

            btnClosePopup.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    if (!type.get(count[0])) {

                        if(questions.size()-1 == count[0]) // if you count[0] is init to 0
                            //player has won
                            count[0] = 0;
                        else if(questions.size()-1 < count[0])
                            try {
                                throw new Exception("Invalid ");
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        else
                        count[0]++;

                        mQuestion.setText(questions.get(count[0]).question); // you dont need calculate the module anymore
                        pwindo.dismiss();
                    } else {
                        finish();
                    }

                }
            });


        }
    });
}

现在,当我回答相同的问题时,列表会继续进行。我希望列表停在最后一个问题上。例如,当我回答列表中的最后一个问题时,我会看到一个弹出窗口,表示祝贺!或类似的东西。

3 个答案:

答案 0 :(得分:0)

替换它:

if (type.get(count[0])) {
    count[0]++;
    mQuestion.setText(questions.get((count[0]) % questions.size()).question);
    pwindo.dismiss();
    //mPopupText.setText(questions.get((count[0]) % questions.size()).answer);

} else {
    finish();
}

if (type.get(count[0])) {
    count[0]++;
    if(questions.size() == count[0]++) {
        //player has won
        count[0] = 0;
    }
    mQuestion.setText(questions.get((count[0]) % questions.size()).question);
    pwindo.dismiss();
} else {
    finish();
}

答案 1 :(得分:0)

你面临的泄露窗口的问题必须是因为你正在从没有持有弹出引用的实例中解除弹出窗口,所以我认为你将onClick监听器放在活动之外或者你是从不同的意图使用它,或者在解除弹出窗口之前你可能正在关闭活动。

答案 2 :(得分:0)

我建议不要将icrease计数2次

如果你开始计数[0] = 0,将显示第一个问题,然后在onClick中你将count [0]递增两次,所以当你比较question.size()和count [0]时,你有3 == 2?不,所以当你设置文本时,它会显示问题2文本,不是吗?

我的建议是:

if (type.get(count[0])) {

  if(questions.size()-1 == count[0]) // if you count[0] is init to 0
  {
     AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("WInner")
            .setMessage("You won, play again?")
            .setCancelable(false)
            .setPositiveButton(android.R.string.yes,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // just close dialog
                            dialog.cancel();
                        }
                    })
            .setNegativeButton(android.R.string.no,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            finish();
                        }
                    });

    // Create dialog from builder
    AlertDialog alert = builder.create();

    // Show dialog
    alert.show();
    count[0]=0;
  }
  else if(questions.size()-1 < count[0])
    thow new Exception("Invalid ");
  else
    count[0]++;

  mQuestion.setText(questions.get(count[0]).question); // you dont need calculate the module anymore
pwindo.dismiss();
  } else {
   finish();
}

试试这个,但我认为泄漏例外与你在某些情况下不解雇窗口有关。