dialog中hide、dismiss、cancel方法的区别

阅读: 评论:0

dialog中hide、dismiss、cancel方法的区别

dialog中hide、dismiss、cancel方法的区别

主要我之前用的时候不知道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小时内删除。

标签:区别   方法   hide   dialog   cancel
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23