두 가지 방법은 동일한 효과를 가지며 둘 다 대화 상자를 닫습니다. 대화 상자를 생성할 때 setOnCancelListener 메소드를 호출하면 취소가 이 청취를 수행합니다.
취소의 소스 코드를 살펴보세요:
/**
?* 대화를 취소합니다. ?이는 본질적으로 {@link #dismiss()}를 호출하는 것과 같습니다. 하지만< /p>
?* {@link DialogInterface.OnCancelListener}(등록된 경우)도 호출합니다.
?*/
public void cancel() {
if (!mCanceled amp; mCancelMessage != null) {
mCanceled = true
// 이 대화 상자를 다시 사용할 수 있도록 새 메시지를 얻습니다. 사용됨< /p>
Message.obtain(mCancelMessage).sendToTarget()
}
해제();
그런 다음 해제 소스 코드를 살펴보겠습니다.
/**
* 이 대화 상자를 닫고 화면에서 제거하는 방법은 다음과 같습니다.
* 모든 스레드에서 안전하게 호출됩니다. ?대화상자가 닫힐 때 정리 작업을 수행하기 위해 이 메소드를 재정의하면 안 됩니다. 대신에
* {@link # onStop}.< /p>
*/
@Override
public void dismiss() {
if (Looper.myLooper() == mHandler.getLooper( )) {
hideDialog();
} else {
mHandler.post(mDismissAction)
}
}
마지막은 dismissDialog 메서드입니다:
void dismissDialog() {
if (mDecor == null || ! mShowing) {
return;
}
if (mWindow.isDestroyed()) {
Log.e(TAG, " Dialog()를 해제하려고 시도했지만 대화 상자의 창이 이미 파괴되었습니다!");
return
;
}
시도 {
mWindowManager.removeViewImmediate(mDecor)
} 마지막으로 {
if (mActionMode != null) {
mActionMode.finish()
}
mDecor = null
mWindow.closeAllPanels( );
onStop();
mShowing = false
sendDismissMessage(); }요약:
위 소스 코드에서 볼 수 있듯이 취소 메소드는 실제로 호출된 해제된 메소드입니다. DialogInterface.OnCancelListener가 수신하도록 설정된 경우 취소를 사용하여 닫기 이벤트를 수신할 수 있습니다.