主要我之前用的时候不知道dismiss和cancel有啥区别。。。然后今天想起来了就去查了一下,顺便记下来备忘。
dismiss:大概就是删除视图,调用Onstop回调,并把mShowing置为false。
void dismissDialog() {if (mDecor == null || !mShowing) {return;}if (mWindow.isDestroyed()) {Log.e(TAG, "Tried to dismissDialog() but the Dialog's window was already destroyed!");return;}try {veViewImmediate(mDecor);} finally {if (mActionMode != null) {mActionMode.finish();}mDecor = null;mWindow.closeAllPanels();onStop();mShowing = false;sendDismissMessage();}}
cancel:也调用了dismiss,只不过先判断了mCancelMessage是否为空
@Overridepublic void cancel() {if (!mCanceled && mCancelMessage != null) {mCanceled = true;Message.obtain(mCancelMessage).sendToTarget();}dismiss();}
mCancelMessage实际上是把listener封装成obj的Message
public void setOnCancelListener(@Nullable OnCancelListener listener) {if (mCancelAndDismissTaken != null) {throw new IllegalStateException("OnCancelListener is already taken by "+ mCancelAndDismissTaken + " and can not be replaced.");}if (listener != null) {mCancelMessage = mListenersHandler.obtainMessage(CANCEL, listener);} else {mCancelMessage = null;}}
hide:这是干嘛的。。。隐藏起来又不销毁,有啥用?万一后面忘了呢,销毁Activity的时候就会报错:android.view.WindowLeaked: Activity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorViewthat was originally added here,所以建议不用。
public void hide() {if (mDecor != null) {mDecor.setVisibility(View.GONE);}}
总结:
建议用dismiss,这个比cancel少一个判断,一般来说是够用了,当然如果你有CancelListener的话就用cancel。。。
本文发布于:2024-01-29 11:24:21,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170649866614931.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |