2015-02-10 128 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

相關問題