Re:Android Dialog中Handler的使用

这篇博客详细介绍了Android中Dialog的中断设计,包括如何在窗口关闭时触发监听器。作者通过创建一个ListenersHandler内部类,利用Handler的Message机制,在Dialog关闭时调用OnDismissListener的onDismiss方法,实现对话框消失时的回调功能。文中还展示了关键代码实现,展示了如何设置和处理窗口关闭事件。
摘要由CSDN通过智能技术生成

安卓弹窗中断设计

原文链接:https://blog.csdn.net/qq_26723241/article/details/79015919
写的不错,抄一份答案。


public class Dialog implements DialogInterface{
 
    private Message mDismissMessage;//窗口消失时候的Message实例
 
    private static final int DISMISS = 0x43;//咱们只看dissmiss这个状态,cancel和show是同理
 
    private final Handler mListenersHandler;//一个Handler实例
 
 
    Dialog(@NonNull Context context, @StyleRes int themeResId, boolean createContextThemeWrapper) {
        mListenersHandler = new ListenersHandler(this);//ListenersHandler内部类,继承了Handler
    }
 
    private void sendDismissMessage() {
        if (mDismissMessage != null) {
            Message.obtain(mDismissMessage).sendToTarget();//Message.obtain(message)想当于copy一个新的message, 每一个Message中有一个Handler索引,sendToTarget方法内部调用Handler.sendMessage(this)发送信息。
        }
    }
 
 
    public void setOnDismissListener(@Nullable DialogInterface.OnDismissListener listener) {
        if (listener != null) {
            mDismissMessage = mListenersHandler.obtainMessage(DISMISS, listener);//handler的obtainMessage(what,Object)方法返回一个what等于DISMISS,Object等于listenter,Target等于handler的Message
        } else {
            mDismissMessage = null;
        }
    }
 
 
    private static final class ListenersHandler extends Handler {
        private final WeakReference<DialogInterface> mDialog;
 
        public ListenersHandler(Dialog dialog) {
            mDialog = new WeakReference<DialogInterface>(dialog);//弱引用
        }
 
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {//联系上了,msg.what肯定是DISMISS
                case DISMISS:
                    ((DialogInterface.OnDismissListener) msg.obj).onDismiss(mDialog.get());//msg的obj就是Listener呗,调用其中的onDismiss方法。
                    break;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值