Android开发——diglog cancel与dismiss方法区别
2024-08-26 07:46:48
AlertDialog使用很方便,但是有一个问题就是:dismiss方法和cancel方法到底有什么不同?
今天有时间,看了看源码(其实源码并不是全都那么深奥的!~~)。
AlertDialog继承与Dialog,现在各位看看结构图:
然后在Dialog类中找到了dismiss和cancel方法的实现。重要看dismiss的源码:
- public void cancel() {
- if (mCancelMessage != null) {
- // Obtain a new message so this dialog can be re-used
- Message.obtain(mCancelMessage).sendToTarget();
- }
- dismiss();
- }
看明白了吧! 在cancel方法中调用了dismiss方法。 但是现在还有一个问题就是:mCancelMessage是什么?
private Message mCancelMessage; // 这是源码中的声明
然后再来看源码:
- public void setOnCancelListener(final OnCancelListener listener) {
- if (listener != null) {
- mCancelMessage = mListenersHandler.obtainMessage(CANCEL, listener);
- } else {
- mCancelMessage = null;
- }
- }
- ublic void setCancelMessage(final Message msg) {
- mCancelMessage = msg;
- }
现在问题清楚了,就是如果你在创建AlertDialog的时候调用了setOnCancelListener 这个mCancelMessage变量有作用,否则dismiss和cancel等同。
最新文章
- 基于虎书实现LALR(1)分析并生成GLSL编译器前端代码(C#)
- Java泛型及实践
- struts2.5的配置及其注意事项
- python 常用模块之os、sys、shutil
- sublime-生成html1.0
- Java反射机制专题
- jquery 中post 、get的同步问题
- 二、innerHTML应用测试
- 【转载】HTTP 错误 500.19 - Internal Server Error
- angular的$scope,这东西满重要的
- 可以开心的用Markdown了
- PostgreSQL Cascade Replication
- Xcode 性能优化
- python-unicode十进制数字转中文
- 使用vhd灌装系统——测试系统专用
- 浏览器测试功能(jquery1.9以后已取消)
- 修改tomcat默认的端口号
- SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 和oracle 查询数据中文乱码问题
- Windows下FFmpeg快速入门 <;第二篇>;
- docker容器和镜像区别