当前位置: 首页 > news >正文

androidalertDialog无法显示按钮的bug

不废话,直接上代码

 1 @Override
 2             public void onTabChanged(String tabId) {
 3                 Builder builder = new AlertDialog.Builder(
 4                         TabWidgetActivity.this);
 5                 builder.setTitle("选项卡弹窗");
 6 
 7                 // builder.setMessage("您选中了第"+tabId+"个选项卡");//tabId 获取的是选项卡的id
 8                 builder.setMessage("您选中了第" + mTabHost.getCurrentTab() + "个选项卡");
 9                 // builder.setIcon(R.drawable.icon);
10                 AlertDialog dialog = builder.create();
11                 builder.setPositiveButton("确定", new OnClickListener() {
12                     @Override
13                     public void onClick(DialogInterface dialog, int which) {
14                         Toast.makeText(TabWidgetActivity.this, "您点击了确定按钮",
15                                 Toast.LENGTH_LONG).show();
16                         dialog.cancel();
17                     }
18                 });
19                 builder.setNegativeButton("取消", new OnClickListener() {
20 
21                     @Override
22                     public void onClick(DialogInterface dialog, int which) {
23                         Toast.makeText(TabWidgetActivity.this, "您点击了取消按钮",
24                                 Toast.LENGTH_LONG).show();
25                         dialog.cancel();
26                     }
27                 });
28 
29                 dialog.show();
30             }
31         });

发现确定和取消的按钮没有显示出来

注意代码中黑体字 AlertDialog dialog = builder.create();的位置

修改代码后的

修改后的代码

 1 @Override
 2             public void onTabChanged(String tabId) {
 3                  Builder builder=new AlertDialog.Builder(TabWidgetActivity.this);
 4                 builder.setTitle("选项卡弹窗");
 5                 
 6                 //builder.setMessage("您选中了第"+tabId+"个选项卡");//tabId 获取的是选项卡的id
 7                 builder.setMessage("您选中了第"+mTabHost.getCurrentTab()+"个选项卡");
 8                 //builder.setIcon(R.drawable.icon);
 9                  
10                 builder.setPositiveButton("确定", new OnClickListener() {
11                     @Override
12                     public void onClick(DialogInterface dialog, int which) {
13                         Toast.makeText(TabWidgetActivity.this, "您点击了确定按钮", Toast.LENGTH_LONG).show();
14                         dialog.cancel();
15                     }
16                 });
17                 builder.setNegativeButton("取消", new OnClickListener() {
18                     
19                     @Override
20                     public void onClick(DialogInterface dialog, int which) {
21                         Toast.makeText(TabWidgetActivity.this, "您点击了取消按钮", Toast.LENGTH_LONG).show();
22                         dialog.cancel();
23                     }
24                 });
25                 
26                 AlertDialog dialog=    builder.create();
27                 dialog.show();
28             }
29         });

注意此时 AlertDialog dialog= builder.create();的位置

 
 

 

其实对比不难发现,为题在于创建alertDialog的时候,也就是create()方法被触发的时候,如果这时候还没绑定setPositiveButton和setNegativeButton 那么创建对话框之后也无法引用到builder的一些属性资源。(表示相当的拗口)

观察create的源码

 1 public AlertDialog create() {
 2             final AlertDialog dialog = new AlertDialog(P.mContext);
 3             P.apply(dialog.mAlert);
 4             dialog.setCancelable(P.mCancelable);
 5             dialog.setOnCancelListener(P.mOnCancelListener);
 6             if (P.mOnKeyListener != null) {
 7                 dialog.setOnKeyListener(P.mOnKeyListener);
 8             }
 9             return dialog;
10         }

就知道为什么不能在引用builder对应了。

由于时间原因,就不深入研究,等把android的基础read一遍以后有时间在来慢慢品味源码。

相关文章:

  • 跟我一起学习ASP.NET 4.5 MVC4.0(四)
  • 顶部菜单栏(固定在顶部)
  • 系统安装后的初始环境设置
  • Leveldb -转
  • 陶哲轩实分析 命题7.2.9 绝对收敛判别法
  • NYOJ467 中缀式变后缀式
  • IHttpModule
  • 陶哲轩实分析 命题 7.4.1 证明
  • ASP.NET Cache的一些总结2
  • css样式表在ie6.0中的hack应用
  • 垃圾代码评析——关于《C程序设计伴侣》6.2(一)
  • vlan划分及vlan间通信
  • 数据结构和算法
  • 时钟周期/指令周期/机器周期/总线周期
  • 多项式的乘法满足结合律和交换律
  • 【Leetcode】101. 对称二叉树
  • 【RocksDB】TransactionDB源码分析
  • android图片蒙层
  • ComponentOne 2017 V2版本正式发布
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • iOS | NSProxy
  • JAVA SE 6 GC调优笔记
  • Java方法详解
  • jquery cookie
  • Protobuf3语言指南
  • Python_网络编程
  • python大佬养成计划----difflib模块
  • python学习笔记-类对象的信息
  • 闭包--闭包作用之保存(一)
  • 大型网站性能监测、分析与优化常见问题QA
  • 给初学者:JavaScript 中数组操作注意点
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 深入 Nginx 之配置篇
  • 提醒我喝水chrome插件开发指南
  • raise 与 raise ... from 的区别
  • ​虚拟化系列介绍(十)
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • # Panda3d 碰撞检测系统介绍
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #stm32整理(一)flash读写
  • $GOPATH/go.mod exists but should not goland
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (27)4.8 习题课
  • (bean配置类的注解开发)学习Spring的第十三天
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (十)T检验-第一部分
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)程序员疫苗:代码注入
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .“空心村”成因分析及解决对策122344
  • .jks文件(JAVA KeyStore)
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET CLR Hosting 简介
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET 药厂业务系统 CPU爆高分析