AlertDialog使用很方便,但是有一个问题就是:dismiss方法和cancel方法到底有什么不同?

今天有时间,看了看源码(其实源码并不是全都那么深奥的!~~)。

AlertDialog继承与Dialog,现在各位看看结构图:

然后在Dialog类中找到了dismiss和cancel方法的实现。重要看dismiss的源码:

  1. public void cancel() {
  2. if (mCancelMessage != null) {
  3. // Obtain a new message so this dialog can be re-used
  4. Message.obtain(mCancelMessage).sendToTarget();
  5. }
  6. dismiss();
  7. }

看明白了吧! 在cancel方法中调用了dismiss方法。 但是现在还有一个问题就是:mCancelMessage是什么?

private Message mCancelMessage; // 这是源码中的声明

然后再来看源码:

  1. public void setOnCancelListener(final OnCancelListener listener) {
  2. if (listener != null) {
  3. mCancelMessage = mListenersHandler.obtainMessage(CANCEL, listener);
  4. } else {
  5. mCancelMessage = null;
  6. }
  7. }
  8. ublic void setCancelMessage(final Message msg) {
  9. mCancelMessage = msg;
  10. }

现在问题清楚了,就是如果你在创建AlertDialog的时候调用了setOnCancelListener 这个mCancelMessage变量有作用,否则dismiss和cancel等同。

最新文章

  1. 基于虎书实现LALR(1)分析并生成GLSL编译器前端代码(C#)
  2. Java泛型及实践
  3. struts2.5的配置及其注意事项
  4. python 常用模块之os、sys、shutil
  5. sublime-生成html1.0
  6. Java反射机制专题
  7. jquery 中post 、get的同步问题
  8. 二、innerHTML应用测试
  9. 【转载】HTTP 错误 500.19 - Internal Server Error
  10. angular的$scope,这东西满重要的
  11. 可以开心的用Markdown了
  12. PostgreSQL Cascade Replication
  13. Xcode 性能优化
  14. python-unicode十进制数字转中文
  15. 使用vhd灌装系统——测试系统专用
  16. 浏览器测试功能(jquery1.9以后已取消)
  17. 修改tomcat默认的端口号
  18. SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 和oracle 查询数据中文乱码问题
  19. Windows下FFmpeg快速入门 <第二篇>
  20. docker容器和镜像区别

热门文章

  1. 私人网盘系统2.0—全部升级为layUI+PHP(持续更新中)shang
  2. OpenCV探索之路(二十七):皮肤检测技术
  3. 隐藏17年的Office远程代码执行漏洞(CVE-2017-11882)
  4. vpn服务器搭建
  5. 如何用while循环 输出一个九九乘法表
  6. 基于 nodejs 的 webSockt (socket.io)
  7. canvas动画之动态绘出六边形
  8. 分水岭 golang入坑系列
  9. 大数据查询——HBase读写设计与实践
  10. Tinc VPN