2012-01-18 175 views
47

我創建了一個工作正常的AlertDialog。它正在消失,如果我按:
1)逃生鍵盤按鈕或
2)後退按鈕使用鼠標
爲了使它保持專注,甚至在上述條件下,我加入了「.setCancelable(假)」語句,同時建立。但是,我仍然看到對話消失。哪裏有問題? 請幫忙。
AlertDialog的setCancelable(false)方法不起作用

代碼添加:

return new AlertDialog.Builder(getActivity()) 
       .setIcon(R.drawable.alert_dialog_icon) 
       .setTitle(title) 
       .setCancelable(false) 
       .setPositiveButton(R.string.alert_dialog_ok, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
          ((FragmentAlertDialog)getActivity()).doPositiveClick(); 
         } 
        } 
       ) 
       .setNegativeButton(R.string.alert_dialog_cancel, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
          ((FragmentAlertDialog)getActivity()).doNegativeClick(); 
         } 
        } 
       ) 
       .create(); 


ENV:在XP專業版的Android 4.0。

+0

請張貼一些代碼。 – Spencer 2012-01-18 06:50:42

+0

你能上傳你的代碼嗎? – Lucifer 2012-01-18 06:51:02

+0

'.setCancelable(false)'位於代碼的第四行。 – San 2012-01-18 07:05:47

回答

97

this你的完整代碼?那麼請更改代碼設置setCancelable(false)這樣

void showDialog() { 
    DialogFragment newFragment = MyAlertDialogFragment.newInstance(
      R.string..alert_dialog_two_buttons_title); 
    newFragment.setCancelable(false); 
    newFragment.show(getFragmentManager(), "dialog"); 
} 
+0

是的,代碼片段來自您指向的鏈接。 – San 2012-01-19 05:50:00

+0

你有沒有試過上面的代碼?這個有幫助嗎? – Sandy 2012-01-19 05:50:59

+0

是的,它確實有幫助。非常感謝您的回答。其實,我正在起草一個迴應,同時你已經發布了你的回覆。 – San 2012-01-19 06:03:54

4

另一個工作示例:

步驟1

創建類:

public class DialogActivity extends android.app.DialogFragment { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setMessage(R.string.myMessage); 
     setCancelable(false); 
     return builder.create(); 
    } 
} 

步驟2

Add方法您Activity

private boolean showDialog() { 
    FragmentManager manager = getFragmentManager(); 
    DialogActivity dialogActivity; 
    dialogActivity = new DialogActivity(); 
    dialogActivity.show(manager, "DialogActivity"); 
    return true; 
} 

步驟3

呼叫showDialog()當你需要顯示的對話框

8

您的對話框設置爲無取消,但您的主機片段仍然是取消。用setCancelable(false)設置你的片段。

0
dialog.setCanceledOnTouchOutside(false); 

setCanceledOnTouchOutside(boolean)

設置當窗口的邊界之外觸及這個對話框是否被取消。如果設置爲true,則對話框設置爲可取消(如果尚未設置)。