2011-05-20 76 views
1

我有一個按鈕的活動,單擊按鈕以顯示AlertDialog,工作正常。 但是當我單擊AlertDialog上的「OK」或「Cancel」按鈕後,AlertDialog會根據需要消失,但奇怪的是:Android:AlertDialog解散後,該活動似乎失去了重點

AlertDialog消失後,Activity似乎失去了焦點,這意味着它無法再接受任何接觸。

下面是代碼:

protected Dialog onCreateDialog(int id, Bundle args) 
{ 
    new AlertDialog.Builder(this).create().show(); 
    Dialog dialog = null; 
    switch(id) 
    { 
    case... 
     break; 
    case ID_DIALOG2: 
     AlertDialog.Builder builder = new AlertDialog.Builder(ControlDialog.this); 
     builder.setTitle("Prompt"); 
     builder.setMessage("Are you sure to quit?"); 

     builder.setPositiveButton("OK", new AlertDialog.OnClickListener() 
     { 
      public void onClick(DialogInterface dialog, int which) 
      { 
       Log.e("AlertDialog", dialog.toString()+ " " + which); 

       // do something else 
       dialog.dismiss(); // even without dismiss(), the AlertDialog can disappear too. 
       //ControlDialog.this.dismissDialog(ID_DIALOG2); // doesn't work either 
       // dialog.cancel(); // doesn't work either 
      } 

     }); 
     builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
     { 
      public void onClick(DialogInterface dialog, int which) 
      { 
       Log.e("AlertDialog", dialog.toString()+ " " + which); 
       // do something else 
       dialog.dismiss(); 
      } 
     }); 

     dialog = builder.create(); 
     //dialog.show(); 
     break; 
    } 
    return dialog; 
} 

protected void onPrepareDialog(int id, Dialog dialog) 
{ 
    switch(id) 
    { 
    case ... 
     break; 
    case ID_DIALOG2: 
     ((AlertDialog)dialog).setTitle("Title"); 
     ((AlertDialog)dialog).setMessage("Simple Information"); 
     break; 
    } 
} 

public void onClick(View v) 
{ 
    switch(v.getId()) 
    { 
    case R.id.show_button: 
     this.showDialog(ID_DIALOG2, null); 
     break; 
    case ... 
    } 
} 

對不起,我不能發佈圖片:(

點擊的活動「顯示」按鈕後,出現AlertDialog 點擊「確定後。 「AlertDialog上的按鈕,AlertDialog消失但是, Activity無法接收任何觸摸

如果我單擊模擬器的」BACK「按鈕,那麼Activity可以再次接收觸摸,並且從此開始,它會工作得很好,例如再次單擊「顯示」按鈕,然後再次單擊「確定」,在AlertDialog消失後,活動即可接受觸摸,而無需再次點擊模擬器的「返回」按鈕。

那麼,有誰能告訴我如何解決這個問題(活動不能第一次接觸)?

TIA

回答

1

您的「取消」按鈕是否正常工作?即按下後活動是否正確?

我注意到在你的代碼有區別的:

builder.setPositiveButton("OK", new AlertDialog.OnClickListener() 

builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() 

第一行使用AlertDialog.OnClickListener第二個使用DialogInterface.OnClickListener。我剛剛檢查了我的代碼,我的所有對話框都使用了DialogInterface.OnClickListener。我不確定它是否會有所作爲,但可能值得使用「確定」按鈕嘗試DialogInterface.OnClickListener

+0

謝謝加里。它首先是DialogInterface.OnClickListener,然後在嘗試多次失敗後更改爲AlertDialog.OnClickListener.I通過使用DialogInterface.OnClickListener或AlertDialog.OnClickListener – Patrick 2011-05-20 05:48:50

+0

確定了相同的結果。取消工作正常嗎?你可能想刪除這一行:'新的AlertDialog.Builder(this).create()。show();'。我不知道爲什麼它在那裏,但它可能導致問題。 – 2011-05-20 06:00:44

+0

我犯了一個錯誤。我忘了刪除方法onCreateDialog中的第一行(僅用於嘗試目的):new AlertDialog.Builder(this).create()。show(); 然後它工作正常... – Patrick 2011-05-20 06:01:09

1

刪除new AlertDialog.Builder(this).create().show();

從您的代碼。它將工作絕對好。