首页 > 解决方案 > 带有 DialogInterface 的嵌套开关

问题描述

我正在制作一个有多种选择的叙事游戏,所以我必须使用嵌套开关。

我正在使用一个带有单一选择的 dialogInterface,我想做这样的事情:

switch(i){
case 0: response1;
           switch(i){ 
                     case 0: response 2
                    switch(i){
                                case 0: response 3
                              }
                      }
}

但问题是切换键(i),我不知道在第一次切换后如何更改它:/

这是我的代码:

listChoices = new String[]{"Answer1,answer2,answer3"};

    Button btn = (Button) findViewById(R.id.btnChoice);
    btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // Text to choose

            AlertDialog.Builder mBuilder= new AlertDialog.Builder(ChapTest.this);
            mBuilder.setTitle("Your choice:");

            mBuilder.setSingleChoiceItems(listChoices, -1, new DialogInterface.OnClickListener() {
                @Override

                public void onClick(DialogInterface dialogInterface,int i) {
                //fonction list text
                    userInput.setText(listChoices[i]);

                          // Fonction message
                            ResponseMessage message = new ResponseMessage(userInput.getText().toString(), 1);
                            responseMessageList.add(message);


                    switch (i) {
                        case 0:
                            ResponseMessage message2 = new ResponseMessage("Désolé " + prenom + ", tu tiens le coup?", 2);
                            responseMessageList.add(message2);

                            listChoices = new String[]{"answer4,answer5,answer6 "};

                            switch (i) {
                                case 0:
                                    ResponseMessage message6 = new ResponseMessage("Test", 2);
                                    responseMessageList.add(message6);
                                    break;
                            }

                            break;

标签: javaandroid

解决方案


在您的代码中,您永远不会在第二个“list Choices = new ...”之后重新分配“i”变量,因此在那里执行“switch(i)”绝对没用,因为您处于前面的“case 0:... ” 的“i”,因此该变量在所有情况下都保持不变。

如果您知道嵌套事物的“堆栈”有多深,则可以使用除“i”以外的其他变量名称,例如“j”、“k”等...

listChoices = new.... 
mBuilder.setSingleChoiceItems(listChoices, -1, new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialogInterface, int i) {
       ...use "i"...
       list Choices = new...
       mBuilder.setSingleChoiceItems(listChoices, -1, new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialogInterface, int j) {
     ...use "j"... 
  } 
   }

推荐阅读