2011-11-28 51 views
1

我有以下問題的Android 2.2(API 8)發展:Android的對話框駁回,而不是取消

我有一個自定義對話框類是這樣的:

public AuthDialog(final Context context, OnDismissListener dismissListener, OnCancelListener cancelListener) { 
    super(context); 
    setOnDismissListener(dismissListener); 
    setOnCancelListener(cancelListener); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.userpassdialog); 
    setTitle("Enter email and password"); 
    setCancelable(true); 
    setCanceledOnTouchOutside(true); 
    authEmail = (EditText) findViewById(R.id.authEmail); 
    authPass = (EditText) findViewById(R.id.authPass); 
    alertMessage = (TextView) findViewById(R.id.auth_alert); 
    Button authButton = (Button) findViewById(R.id.authButton); 
    View.OnClickListener onClickListener = new View.OnClickListener() { 
     public void onClick(View v) { 
      if (checkCredentials()) 
       dismiss(); 
      else 
       showAlert(); 
     } 
    }; 
    authButton.setOnClickListener(onClickListener); 
} 

private void showAlert() { 
    alertMessage.setText("Wrong user/pass"); 
    authEmail.setText(null); 
    authPass.setText(null); 
} 

private boolean checkCredentials() { 
    // Empty user/pass for now 
    boolean checkEmail = authEmail.getText().toString().equals(""); 
    boolean checkPassword = authPass.getText().toString().equals(""); 
    return checkEmail && checkPassword; 
} 

@Override 
public void onBackPressed() { 
    cancel(); 
} 

我創建一個新的AuthDialog這樣的:

private void authenticateThenAccept() { 
    OnDismissListener dismissListener = new OnDismissListener() { 
     @Override 
     public void onDismiss(DialogInterface dialog) { 
      accept(); 
     } 
    }; 
    OnCancelListener cancelListener = new OnCancelListener() { 
     @Override 
     public void onCancel(DialogInterface dialog) { 
      cancel(); 
     } 
    }; 
    AuthDialog dialog = new AuthDialog(context, dismissListener, cancelListener); 
    dialog.show(); 
} 

我使用調試器,我看到,當我取消(使用後退按鈕或按下對話外)的應用程序關閉對話框,而不是取消的。

有人對Dialogs有這種問題嗎?

謝謝先進。

回答

2

假設這個對話框應該是模態的,讓你的對話框成爲一個新的活動。

+0

最後我對期望值使用了一個Activity和startActivityForResult方法。謝謝。 –

+0

恕我直言,看起來像矯枉過正。卡勒的回答解釋了發生的事情;處理這個事實的一種方法是取消設置一個標誌,這樣解僱就知道這是一個取消。 – ToolmakerSteve

0

setCancelable(false)將阻止後退按鈕做任何事情。許多開發人員只是關閉後退按鈕關閉對話框的功能,因爲不清楚這是否是對用戶的取消或正常操作。

+0

沒有。我禁用了後退按鈕,創建了一個「取消」按鈕,它仍然關閉對話框。 –

10

onDismiss()總是在對話框關閉時觸發。 setOnCancelListener()的文檔狀態如下:「只有當對話框被取消時,如果創建者需要知道它什麼時候被解散,通常使用setOnDismissListener」「,即它不是onCancel或onDismiss,而是當對話框被取消。我同意,如果情況並非如此,那麼它會更有意義。

相關問題