2015-02-10 129 views
0

嗨我一直在努力通过单击已打开的对话框上的按钮来创建一个对话框。
第一个对话框的名称= dialog_main
第二个对话框的名称= dialog_edit
首先,我打开dialog_main。它上面有一个按钮,打开dialog_edit。
当我在dialog_edit之外单击时,它会返回到dialog_main,这就是它应该做的事情。
但是,当我点击后退按钮时,它会关闭对话并返回到主要活动。

如何在点击后退按钮时仅关闭活动对话框,而不是背后的对话框?

我只想让dialog_edit的后退按钮事件返回到dialog_main。请参阅代码。

final Dialog dialog_main = new Dialog(ViewTask.this); 
      dialog_main.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      dialog_main.setContentView(R.layout.dialog_main); 
      dialog_main.setCanceledOnTouchOutside(true); 
      dialog_main.setCancelable(true); 
      dialog_main.show(); 

     //button is a button displayed on dialog_main 
     button_edit_details.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        final Dialog dialog_edit = new Dialog(ViewTask.this); 
        dialog_edit.requestWindowFeature(Window.FEATURE_NO_TITLE); 
        dialog_edit.setContentView(R.layout.dialog_edit_details); 
        dialog_edit.setCancelable(true); 
        dialog_edit.setCanceledOnTouchOutside(true); 
        dialog_edit.show(); 

        dialog_edit.setOnCancelListener(new DialogInterface.OnCancelListener() { 
         @Override 
         public void onCancel(DialogInterface dialogInterface) { 
        //do the operations 
        dialog_edit.dismiss(); 
        }); 


        dialog_edit.setOnKeyListener(new Dialog.OnKeyListener() { 
        @Override 
        public boolean onKey(DialogInterface arg0, int keyCode, KeyEvent event) { 

         if (keyCode == KeyEvent.KEYCODE_BACK) { 
          //do same operations 
          dialog_edit.dismiss();     
       }); 


      } 
      }); //end of button onclicklistener 


    dialog_main.setOnCancelListener(new DialogInterface.OnCancelListener() { 
      @Override 
      public void onCancel(DialogInterface dialog_main) { 
       //Data is displayed from operations in dialog_edit 
       dialog_main.dismiss(); 
      } 
     }); 

     dialog_main.setOnKeyListener(new Dialog.OnKeyListener() { 
      @Override 
      public boolean onKey(DialogInterface dialog_main, int keyCode2, KeyEvent event2) { 
       if (keyCode2 == KeyEvent.KEYCODE_BACK) { 
        //Data is displayed from operations in dialog_edit 
        dialog_main.dismiss(); 
       } 
       return true; 
      } 
     }); 

} 



有可能是在代码中犯了一些错误,但我希望你得到的我在做什么的想法。我已经尝试了在其他地方放置“dialog_main.dissmiss()”的几个组合,但问题依然如此。

enter image description here

回答

1

我能想到的一个解决方案是在适当的位置切换主对话框的可取消属性。

final Dialog dialog_main = new Dialog(ViewTask.this); 
      dialog_main.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      dialog_main.setContentView(R.layout.dialog_main); 
      dialog_main.setCanceledOnTouchOutside(true); 
      dialog_main.setCancelable(true); 
      dialog_main.show(); 

    //button is a button displayed on dialog_main 
    button_edit_details.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       final Dialog dialog_edit = new Dialog(ViewTask.this); 
       dialog_edit.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       dialog_edit.setContentView(R.layout.dialog_edit_details); 
       dialog_edit.setCancelable(true); 
       dialog_edit.setCanceledOnTouchOutside(true); 


       //mark main dialog as non-cancelable here 
       dialog_main.setCancelable(false); 
       dialog_edit.show(); 

       dialog_edit.setOnCancelListener(new DialogInterface.OnCancelListener() { 
        @Override 
        public void onCancel(DialogInterface dialogInterface) { 
       //do the operations 
       dialog_edit.dismiss(); 
       }); 


       dialog_edit.setOnKeyListener(new Dialog.OnKeyListener() { 
       @Override 
       public boolean onKey(DialogInterface arg0, int keyCode, KeyEvent event) { 

        if (keyCode == KeyEvent.KEYCODE_BACK) { 
         //do same operations 
         dialog_edit.dismiss(); 


         //mark main dialog as cancelable again 
         dialog_main.setCancelable(true);     
      }); 


     } 
     }); //end of button onclicklistener 


dialog_main.setOnCancelListener(new DialogInterface.OnCancelListener() { 
     @Override 
     public void onCancel(DialogInterface dialog_main) { 
      //Data is displayed from operations in dialog_edit 
      dialog_main.dismiss(); 
     } 
    }); 

    dialog_main.setOnKeyListener(new Dialog.OnKeyListener() { 
     @Override 
     public boolean onKey(DialogInterface dialog_main, int keyCode2, KeyEvent event2) { 
      if (keyCode2 == KeyEvent.KEYCODE_BACK) { 
       //Data is displayed from operations in dialog_edit 
       dialog_main.dismiss(); 
      } 
      return true; 
     } 
    }); 

} 
+0

是的,你的建议很有帮助。我设置了属性dialog_main.setCancelable(false);同时首先声明它,然后在解除dialog_edit时将其更改为true。 – vin 2015-02-11 09:06:04

+0

@victor如果您可以将其标记为正确的答案,它也可以帮助面临类似问题的人。谢谢。 – 2015-02-11 09:07:20

+0

@victor btw如果你声明你的主对话框在声明时是不可取消的,即在显示编辑对话框之前,如果编辑诊断没有显示,后退按钮不能在主诊断上工作,并且只有在编辑之后才会开始工作对话框显示并解除。在上面的解决方案中,后退按钮的行为始终保持一致。 – 2015-02-11 12:13:56

0

我没有测试过,但我想这将解决您的问题..! 替换下面的代码..!

dialog_main.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog_main.setContentView(R.layout.dialog_main); 
     dialog_main.setCanceledOnTouchOutside(false); 
     dialog_main.setCancelable(false); 
     dialog_main.show(); 
+0

dialog_main.setCanceledOnTouchOutside(false); dialog_main.setCancelable(false); 我需要保持这些值真实。 – vin 2015-02-10 13:56:27

相关问题